【问题标题】:How can I prevent children of a TreeView's selected item from inheriting its formatting?如何防止 TreeView 的选定项的子项继承其格式?
【发布时间】:2011-12-18 01:05:01
【问题描述】:
我有一个树视图,我需要在其中将仅选定节点的字体设置为粗体。如果该节点没有任何子节点,它可以正常工作。但是如果选择了具有子节点的节点,则子节点也显示为粗体..
使用以下 XAML:
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
【问题讨论】:
标签:
wpf
xaml
treeview
styles
【解决方案1】:
编辑:您可以只使用 setter 来防止继承:
<Style TargetType="TreeViewItem">
<!-- This has precedence over inheritance -->
<Setter Property="FontWeight" Value="Normal"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold"></Setter>
</Trigger>
</Style.Triggers>
</Style>
或者您可以将此逻辑移动到数据模板中,因此它不会被继承下来,例如
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Name}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=TreeViewItem}}"
Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>