Как я могу запретить дочерним элементам выбранного элемента TreeView наследовать его форматирование? - PullRequest
5 голосов
/ 30 октября 2011

У меня есть древовидная структура, в которой мне нужно установить шрифт только для выбранного узла как полужирный. Он прекрасно работает, если у узла нет дочерних элементов. Но если выбран узел с дочерними узлами, дочерние узлы также отображаются жирным шрифтом.

Использование следующего 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>

1 Ответ

8 голосов
/ 30 октября 2011

Редактировать: Вы можете просто использовать сеттер для предотвращения наследования:

 <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>
...