我有一个TreeView
有很多项目,显然是以树形结构排列的。我试图以粗体打印父节点,并以普通字体打印所有子节点。但是,当我这样做时:
TreeViewItem item = GetParentNode(...);
item.FontWeight = FontWeights.Bold;
这不仅会将父级的样式更改为粗体,还会将其所有子项的样式更改为粗体。我一直在寻找属性来禁用TreeView
类中的递归更新,但我找不到任何属性。我该如何避免这种行为?
答案 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
设置为粗体,则子节点不会更改。