HierarchicalDataTemplate 中样式的 DataTrigger 不起作用——TreeView

DataTrigger in Style in HierarchicalDataTemplate not working -- TreeView

我有一个 DataTrigger 可以根据绑定设置文本框的背景 属性。
这是 xaml 的简化版本:

<TreeView  >
<TreeViewItem Header="Things" >
    <TreeViewItem.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsDirty}" Value="True">
                    <Setter Property="Background" Value="LightGray" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <HierarchicalDataTemplate DataType="{x:Type local:Type1}" ItemsSource="{Binding Children, Mode=OneWay}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" Margin="6,0,6,0" />
                <TextBlock Text="{Binding IsDirty}" Margin="6,0,6,0" />
                <i:Interaction.Behaviors>
                    <dragDrop:FrameworkElementDropBehavior DragEffect="Move"  />
                </i:Interaction.Behaviors>
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeViewItem.Resources>
</TreeViewItem>

我添加了一个 TextBlock 来显示 IsDirty 属性 的值;如果是这样,背景将保持不变。
我曾尝试将样式移动到 HierarchicalDataTemplate.Resources,但这没有任何区别。
我忽略了什么?
谢谢 --

这是因为针对不是从 Control 派生的类型的隐式样式不会 跨越模板边界 ,即不会在模板内部应用,除非它们是在该模板的范围。 Here's a good post 解释它是如何工作的以及为什么这样工作。

为了跨越模板边界,您应该使用从 Control 派生的类型(例如 Label)而不是 TextBlock 并定义针对该类型的隐式样式。

否则,您可以将您的样式移动到模板的资源字典中,从而将其置于相关模板的范围内:

<HierarchicalDataTemplate (...)>
    <HierarchicalDataTemplate.Resources>
        <Style TargetType="{x:Type TextBlock}">
            (...)
        </Style>
    </HierarchicalDataTemplate.Resources>
    (...)
</HierarchicalDataTemplate>