样式更改将应用​​于TreeView节点的所有子项

时间:2013-10-15 11:26:33

标签: c# wpf treeview

我有一个TreeView有很多项目,显然是以树形结构排列的。我试图以粗体打印父节点,并以普通字体打印所有子节点。但是,当我这样做时:

TreeViewItem item = GetParentNode(...);
item.FontWeight = FontWeights.Bold;

这不仅会将父级的样式更改为粗体,还会将其所有子项的样式更改为粗体。我一直在寻找属性来禁用TreeView类中的递归更新,但我找不到任何属性。我该如何避免这种行为?

2 个答案:

答案 0 :(得分:0)

设置字体属性时,它会将其应用于所有子项。您可以创建新的标头模板,并仅将其应用于父节点。

在我的测试中有效的替代方法是设置前景色:

    public MainWindow()
    {
        InitializeComponent();

        StyleParents(MyTreeView.Items);
    }

    private void StyleParents(ItemCollection items)
    {
        foreach (var i in items)
        {
            TreeViewItem tvi = i as TreeViewItem;

            if (tvi != null)
            {
                if (tvi.HasItems)
                {
                    tvi.Foreground = Brushes.Magenta;

                    StyleParents(tvi.Items);
                }
            }                                
        }
    }

答案 1 :(得分:0)

我发现在WPF TreeView中,如果尚未设置属性,则会将属性转移到其子级上。避免此问题的最简单方法(至少以编程方式)是将子节点的字体设置为默认字体。 E.g。

TreeViewItem item = new TreeViewItem ();
item.FontWeight = FontWeights.Normal;
// ...add item to tree

如果现在将父节点的FontWeight设置为粗体,则子节点不会更改。