【发布时间】:2012-02-02 05:27:50
【问题描述】:
在我的一个项目中,我继承了 ListView 并通过设置新的控件模板来覆盖样式。我还覆盖了列标题样式。到目前为止,我已经找到了两种方法:
1) 通过设置样式键并在 GridView 中引用样式:
<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle">
<Setter Property="Background" Value="Wheat" />
</Style>
<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">
2) 通过不为上述样式设置样式键。现在我不需要引用 GridView 中的样式,但它也会覆盖我的应用程序中的所有列表视图标题,而与列表视图类型无关。
由于我在我的应用程序中使用了许多列表视图,我想以第三种更灵活的方式来实现这一点;通过从 ListView 样式中设置 GridView.ColumnHeaderContainerStyle。这样我就不需要在每个 GridView 中引用标题样式。到目前为止,这是 XAML 的简化版本:
<Window.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle">
<Setter Property="Background" Value="Wheat" />
</Style>
<Style TargetType="{x:Type list:MyListView}">
<Setter Property="GridView.ColumnHeaderContainerStyle" Value="{StaticResource MyHeaderStyle}" />
<Setter Property="Background" Value="Linen" />
</Style>
</Window.Resources>
<list:MyListView>
<list:MyListView.View>
<GridView>
<GridViewColumn Header="Column1" />
<GridViewColumn Header="Column2" />
</GridView>
</list:MyListView.View>
</list:MyListView>
不幸的是,这并没有设置标题样式...如果我对上面的 XAML 进行此更改,它可以工作:
<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">
有什么想法吗?
【问题讨论】:
标签: wpf listview gridview columnheader