wpf - 如何在 WPF 中自动调整 GridViewColumn 数据大小并右对齐?

标签 wpf xaml listview gridview gridviewcolumn

我怎样才能:

  • 将 ID 列中的文本右对齐
  • 使每列根据具有最长可见数据的单元格的文本长度自动调整大小?

这是代码:

<ListView Name="lstCustomers" ItemsSource="{Binding Path=Collection}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="ID" DisplayMemberBinding="{Binding Id}" Width="40"/>
            <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" Width="100" />
            <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}"/>
        </GridView>
    </ListView.View>
</ListView>

部分答案:

谢谢 Kjetil,GridViewColumn.CellTemplate 工作得很好,自动宽度当然也能工作,但是当用长于列宽的数据更新 ObservativeCollection“集合”时,列大小不会自行更新,因此这只是一个数据初始显示的解决方案:

<ListView Name="lstCustomers" ItemsSource="{Binding Path=Collection}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="ID" Width="Auto">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Id}" TextAlignment="Right" Width="40"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" Width="Auto" />
            <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}" Width="Auto"/>
        </GridView>
    </ListView.View>
</ListView>

最佳答案

要使每列自动调整大小,您可以在 GridViewColumn 上设置 Width="Auto"。

要右对齐 ID 列中的文本,您可以使用 TextBlock 创建单元格模板并设置 TextAlignment。然后设置ListViewItem.Horizo​​ntalContentAlignment(使用ListViewItem上带有setter的样式)使单元格模板填充整个GridViewCell。

也许有一个更简单的解决方案,但这应该可行。

注意:该解决方案需要 Window.Resources 中的 Horizo​​ntalContentAlignment=Stretch 和 CellTemplate 中的 TextAlignment=Right

<Window x:Class="WpfApplication6.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</Window.Resources>
<Grid>
    <ListView Name="lstCustomers" ItemsSource="{Binding Path=Collection}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="ID" Width="40">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Id}" TextAlignment="Right" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" Width="Auto" />
                <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}" Width="Auto"/>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>
</Window>

关于wpf - 如何在 WPF 中自动调整 GridViewColumn 数据大小并右对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/560581/

相关文章:

wpf - UnhandledExceptionFilter 捕获所有异常但只重新抛出一些异常

c# - 如何获取在 XAML 中定义的 CollectionView

c# - 在 WP8.1 应用程序中使用转换的问题

android - 使用 ListView 和自定义适配器设置数据

wpf - 如何格式化绑定(bind)到 TextBox 的小数而不激怒我的用户?

c# - 将 Wpf 的数据网格绑定(bind)到数据库

xaml - 在样式中设置 Grid RowDefinitions/ColumnDefinitions 属性

c# - 回收 ListView 中这个看不见的、吞噬性能的单元格是什么?

android - 从自定义 ListView 中的 TextView -w/Button 获取文本

java - 在导航 View 中添加 ListView