我想使用以下规则为WPF树视图制作样式:
我已经提取了TreeView
和TreeItem
的默认样式并进行了一些修改。目前,我的代码框架如下所示:
<Window.Resources>
<Style TargetType="{x:Type TreeView}">
<Style.Resources>
<Style TargetType="{x:Type TreeViewItem}">
...
</Style>
</Style.Resources>
</Style>
</Window.Resources>
<Grid>
<TreeView>
<TreeViewItem Header="Root">
<TreeViewItem header="Inner" />
</TreeViewItem>
</TreeView>
</Grid>
我已经自定义了展开按钮的外观,检查是否一切正常。上面提供的代码按计划运行。
但是我希望自定义样式之外的TreeViewItem
的外观。我写道:
<TreeView>
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="HeaderTemplate">
<Setter.Value>
...
</Setter.Value>
</Setter>
</Style>
</TreeView.Resources>
<TreeViewItem Header="Root">
<TreeViewItem Header="Sub" />
</TreeViewItem>
</TreeView>
项目按照我的要求设置样式,但扩展器按钮返回默认外观。
如何实现我想要的样式机制?
您可以下载whole sample source。
答案 0 :(得分:3)
如果我理解正确,您希望根据默认Style
制作 {em> 。如果这是正确的,那么如果您提供的Style
值为Style.BasedOn
,则可以使用Style
属性:
x:Key
然后,您可以将覆盖 <Window.Resources>
<Style x:Key="DefaultTreeViewStyle" TargetType="{x:Type TreeView}">
<Style.Resources>
<Style TargetType="{x:Type TreeViewItem}">
...
</Style>
</Style.Resources>
</Style>
</Window.Resources>
置于默认的上,如下所示:
Style
新的<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}"
BasedOn="{StaticResource DefaultTreeViewStyle}">
<Setter Property="HeaderTemplate">
<Setter.Value>
...
</Setter.Value>
</Setter>
</Style>
</TreeView.Resources>
将包含默认Style
中的所有设置以及您在此处提供的所有其他设置。
实际上,考虑一下,我认为您可以将覆盖 Style
置于默认值上,而无需在默认值上设置Style
值这样:
x:Key