C# 样式更改应用于TreeView节点的所有子节点
我有一个C# 样式更改应用于TreeView节点的所有子节点,c#,wpf,treeview,C#,Wpf,Treeview,我有一个TreeView,里面有很多项目,显然是以树状结构排列的。我正在尝试以粗体打印父节点,并以普通字体打印其所有子节点。然而,当我这样做时: TreeViewItem item = GetParentNode(...); item.FontWeight = FontWeights.Bold; 这不仅会将父对象的样式更改为粗体,还会将其所有子对象的样式更改为粗体。我一直在TreeView类中寻找禁用此递归更新的属性,但找不到任何属性。如何避免这种行为?设置字体属性时,它会将其应用于所有子项。
TreeView
,里面有很多项目,显然是以树状结构排列的。我正在尝试以粗体打印父节点,并以普通字体打印其所有子节点。然而,当我这样做时:
TreeViewItem item = GetParentNode(...);
item.FontWeight = FontWeights.Bold;
这不仅会将父对象的样式更改为粗体,还会将其所有子对象的样式更改为粗体。我一直在
TreeView
类中寻找禁用此递归更新的属性,但找不到任何属性。如何避免这种行为?设置字体属性时,它会将其应用于所有子项。您可以创建一个新的头模板,并将其仅应用于作为父节点的节点
在我的测试中起作用的另一种方法是设置前景色:
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);
}
}
}
}
我发现在WPF
TreeView
中,如果尚未设置属性,则属性会转移到它们的子级。避免此问题的最简单方法(至少以编程方式)是在创建子节点后立即将其字体设置为默认字体。例如
TreeViewItem item = new TreeViewItem ();
item.FontWeight = FontWeights.Normal;
// ...add item to tree
如果您现在将父节点的
FontWeight
设置为粗体,则子节点将不会更改。您是否在代码隐藏中执行所有操作?你在XAML中有HierarchycalDataTemplate吗?我在XAML中设计了TreeView
(虽然代码非常简单,几乎不值得一提),但是设置字体权重必须通过编程完成,因为这是用户交互的一部分。看看这个:它显示了一个类似的问题,用datatriggers解决了。