【问题标题】:How to Right-align the data in listView (no header) in wpf?如何在wpf的listView(无标题)中右对齐数据?
【发布时间】:2021-05-29 08:52:06
【问题描述】:

我有1个listview,1列,没有标题,数据如何显示在列的右侧,我引用了这个here,但是在我的项目中无效(抱歉我的英语不是很好) .这是我的 xaml 代码:

<Window x:Class="ListViewWPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:ListViewWPF"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
<Window.Resources>
    <Style x:Key="RedTextBoxStyle" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="true">
                <Setter Property="Background" Value="RosyBrown"/>
                <Setter Property="IsReadOnly" Value="True"/>
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition ></ColumnDefinition>
        <ColumnDefinition ></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <ListView ItemsSource="{Binding Mydata}" SelectedItem="{Binding seleItems}" Grid.RowSpan="3" Grid.ColumnSpan="2">
        <ListView.Resources>
            <Style TargetType="GridViewColumnHeader">
                <Setter Property="Visibility" Value="Collapsed" />
            </Style>
        </ListView.Resources>
        <ListView.View>
            <GridView>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Value1}" TextAlignment="Right"></TextBlock>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
    <Button Grid.Row="0" Grid.Column="2" Margin="20" Content="1" FontSize="25"></Button>
    <Button Grid.Row="1" Grid.Column="2" Margin="20" Content="2" FontSize="25"></Button>
</Grid>
</Window>

希望收到你们的cmets!

【问题讨论】:

    标签: c# wpf listview mvvm


    【解决方案1】:

    具有讽刺意味的是,有一篇关于这个主题的完整 MSDN 文章 - How to: Change the Horizontal Alignment of a Column in a ListView - 但是他们遗漏了一条非常重要的信息。

    如果您查看GridViewColumn.Width 上的文档,您会看到两件重要的事情:

    1. 这是double,而不是GridLength(所以没有星号)
    2. 这句话:

    默认为 NaN,它会自动调整为不是列标题的最大列项。

    因此,即使您的 items 正在填充列,您的 column 也仅与最长的项目一样宽,而不是整个 ListView 的宽度。

    现在,您可以使用代码在 this answer 中执行类似操作,或者尝试绑定到 ListView.ActualWidth,但实际上,有一个更简单的解决方案:

    简单的解决方案:改用ListBox

    <ListBox ItemsSource="{Binding Mydata}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
            
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Value1}" HorizontalAlignment="Right"></TextBlock>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    

    ListBox 与没有标题的单列 ListView 非常相似(如果不相同)。除了项目实际上会按照您想要的方式调整大小。

    【讨论】:

    • 谢谢@Keith Stein。 “因此,即使您的项目正在填充列,但您的列仅与最长项目一样宽,而不是整个 ListView 的宽度。” .它唤醒了我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2015-05-05
    • 2010-10-08
    相关资源
    最近更新 更多