首先说明LisbBox/ListView/GridView使用的DataTemplate中使用Grid或其他布局控件中不能平均分配列或者是行是长期以来存在的bug。
我于2015年3月份左右替提交了bug给微软,微软回复确实是一个bug,但目前有更重要的事情要处理,这个bug后期整理汇总还会考虑解决。
LisbBox/ListView/GridView使用如下模板方式不能平均分成3列而是一个挨一个:
<DataTemplate x:Key="xxxxx">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
</DataTemplate>
如下处理方式没有验证,转转的。
本文转载自:http://www.tuicool.com/articles/2u2EJv
在WPF中使用ListView经常会用到GridView作为视图,但是却碰到GridViewColumn不能居中对齐的问题,首先想到不使用GridViewColumn的DisplayMemberBinding属性,直接设置DataTemplate,于是尝试修改代码为:
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock TextAlignment="Center" Text="{Binding XX}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
结果还是不行,因为TextBlock的Width是根据Text内容自动调整,没有填充整个单元格,所以需要调整填充样式。方法有两种:
【方案一】
将DataTemplate元素的MinWidth和单元格的ActualWidth绑定,这样就能让DataTemplate元素始终填满单元格:
<GridViewColumn Width="200" x:Name="column">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" TextAlignment="Center" MinWidth="{Binding Path=ActualWidth,ElementName=column}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
【方案二】
给ListViewItem设置Style,让ListViewItem在水平方向拉伸填充:
<Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
<ListView ItemContainerStyle="{StaticResource ListViewItemStyle}">
然后再给GridViewColumn的Datatemplate设置居中对齐就可以了。