设置WPF TreeView的样式

时间:2013-11-25 12:17:16

标签: c# wpf treeview

我想使用以下规则为WPF树视图制作样式:

  • 必须在样式中定义树的外观;
  • 树的项目外观必须以样式定义;
  • 必须在样式中定义树项目内容(标题)的外观,并在样式外自定义选项。

我已经提取了TreeViewTreeItem的默认样式并进行了一些修改。目前,我的代码框架如下所示:

<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>

我已经自定义了展开按钮的外观,检查是否一切正常。上面提供的代码按计划运行。

Correct styling

但是我希望自定义样式之外的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>

项目按照我的要求设置样式,但扩展器按钮返回默认外观。

Incorrect styling

如何实现我想要的样式机制?

您可以下载whole sample source

1 个答案:

答案 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