gpt4 book ai didi

wpf - 从 ListView 样式内部设置 GridViewColumnHeader 样式

转载 作者:行者123 更新时间:2023-12-02 11:58:34 24 4
gpt4 key购买 nike

在我的一个项目中,我继承了 ListView 并通过设置新的控件模板覆盖了样式。我还覆盖了列标题样式。到目前为止,我找到了两种方法来做到这一点:

1)通过设置样式键并引用GridView中的样式:

<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle">
<Setter Property="Background" Value="Wheat" />
</Style>

<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">

2) 不为上述样式设置样式键。现在我不需要引用 GridView 中的样式,但它还会覆盖我的应用程序中的所有 ListView header ,与 ListView 类型无关。

由于我在应用程序中使用了许多 ListView ,因此我想以第三种更灵活的方式来完成此任务;通过从 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}">

有什么想法吗?

最佳答案

感谢snurre为我指明了正确的方向。我找到了一种方法来完全实现我想要的目标。

您不需要将资源部分放置在 ListView 中(每个 ListView 的那种自定义标签是我首先想要摆脱的)。可以将资源移至 ListView 样式。

以下是更新后的 XAML,它的工作方式完全符合我的要求:

<Window.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle">
<Setter Property="Background" Value="Wheat" />
</Style>

<Style TargetType="{x:Type list:MyListView}">
<Style.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource MyHeaderStyle}" />
</Style.Resources>

<Setter Property="Background" Value="Linen" />
</Style>
</Window.Resources>

<list:MyListView>
<list:MyListView.View>
<GridView>
<GridViewColumn Header="Column1" x:Name="col1" />
<GridViewColumn Header="Column2" x:Name="col2" />
</GridView>
</list:MyListView.View>
</list:MyListView>

关于wpf - 从 ListView 样式内部设置 GridViewColumnHeader 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com