我有点困惑为什么另一个响应被标记为答案。问题是标头容器没有被拉伸(如果您扫描 WPF 可视化树,您可以看到ContentPresenter
不是Stretch
,Center
而是相反)。
如果要拉伸标题,使标题中显示的内容占据所有标题空间,则需要覆盖GridViewColumnHeader
样式。
<ListView HorizontalContentAlignment="Stretch" ...>
<ListView.Resources>
<Style x:Key="StretchedHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Width="200" HeaderContainerStyle="{StaticResource StretchedHeaderStyle}" DisplayMemberBinding="{Binding Path=SomeValue, Mode=OneWay"/>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
上面的代码示例将生成一个延伸到其容器中的列表视图。它具有静态资源标题拉伸样式(在这种情况下必须应用于您要拉伸的每一列,删除x:Key
和HeaderContainerStyle=
以使所有标题都拉伸)。它还全局地将拉伸样式应用于所有列单元格(如果需要,可以将其应用于单个列,类似于标题样式的显示方式)。
如果您需要在后面的代码中执行此操作,您只需创建样式并在列 ( HeaderContainerStyle
) 上设置适当的样式属性。
更新
我刚刚意识到有一种更好的方法来全局应用标题样式。与其将类型应用样式声明为ListView
资源,不如将样式直接应用于GridView
.
<ListView HorizontalContentAlignment="Stretch" ...>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridView.Columns>
<GridViewColumn Width="200" DisplayMemberBinding="{Binding Path=SomeValue, Mode=OneWay"/>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
两种方法都实现了相同的结果,但是上面的这个方法是一种更简洁的方法,因为您正在分配直接负责标题容器样式的样式属性。但是,如果您只需要拉伸特定的列,那么第一种方法是您最好的选择。