【发布时间】:2010-10-08 07:36:11
【问题描述】:
我该怎么做:
- 右对齐 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 运行良好,并且 Auto Width 运行良好,但是当 ObservativeCollection“Collection”使用长于列宽的数据进行更新时,列大小不会自行更新,因此这只是一个数据初始显示的解决方案:
<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>
【问题讨论】:
-
您有没有找到解决自动调整大小问题的方法?我正在经历同样的事情。
-
@Oskar - 列表的虚拟化阻止了自动解决方案。该列表只知道当前可见的项目并相应地设置大小。如果列表后面还有更多项目,它不知道它们,因此无法解释它们。如果您使用数据绑定,ProgrammingWPF - Sells-Griffith 书建议使用手动列宽。 :(
-
@Gishu 谢谢,这实际上是有道理的..
-
如果使用 MVVM 和 Binding 值发生变化,请参阅@Rolf Wessels 回答。
标签: wpf xaml listview gridview gridviewcolumn