我有一个DataTrigger来根据绑定属性设置TextBox的背景 这是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属性的值;当这是真的时,背景保持不变 我已经尝试将Style移动到HierarchicalDataTemplate.Resources,但这没有任何区别 我在俯视什么? 谢谢 -
答案 0 :(得分:1)
这是因为隐式样式定位不是从Control
派生的类型不会跨越模板边界,即不会在模板中应用,除非它们在其中定义模板的范围。 Here's a good post解释它是如何工作的以及它为什么会这样工作。
为了跨越模板边界,您应该使用从Control
(例如Label
)而不是TextBlock
派生的类型,并定义该类型的隐式样式。
否则,您可以将样式移到模板的资源字典中,将样式放在相关模板的范围内:
<HierarchicalDataTemplate (...)>
<HierarchicalDataTemplate.Resources>
<Style TargetType="{x:Type TextBlock}">
(...)
</Style>
</HierarchicalDataTemplate.Resources>
(...)
</HierarchicalDataTemplate>