0

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

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

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

4

2 回答 2

0

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

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

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

于 2013-10-15T13:09:01.747 回答
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);
                }
            }                                
        }
    }
于 2013-10-15T12:54:11.027 回答