我有一个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上,但这并没有什么不同。
我在看什么?
谢谢--
发布于 2016-06-02 17:06:07
这是因为针对非从Control派生的类型的隐式样式不会跨越模板边界,也就是说,除非在模板的范围内定义了它们,否则不会在模板中应用它们。这是个很好的帖子解释了它是如何工作的,为什么它是这样工作的。
为了跨越模板边界,您应该使用从Control派生的类型(例如,Label),而不是TextBlock,并定义针对该类型的隐式样式。
否则,您可以通过将样式移到模板的资源字典中,将样式放在所讨论的模板的作用域中:
<HierarchicalDataTemplate (...)>
<HierarchicalDataTemplate.Resources>
<Style TargetType="{x:Type TextBlock}">
(...)
</Style>
</HierarchicalDataTemplate.Resources>
(...)
</HierarchicalDataTemplate>https://stackoverflow.com/questions/37595524
复制相似问题