2016-06-02 3 views
0

У меня есть DataTrigger для установки фона TextBox на основе связанного свойства.
Вот оптимизированная версия XAML:DataTrigger in Style в HierarchicalDataTemplate не работает - TreeView

<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, но это не имело значения.
Что я вижу?
Спасибо -

ответ

1

Это потому, что неявные стили типов таргетинга не полученные из Control не пересечь границы шаблона, т.е. не применяется в шаблонах, если они не определены в рамках этого шаблона. Here's a good post, объясняя, как это работает и почему это работает.

Для того, чтобы пересечь границу шаблона, вы должны использовать тип, производный от Control (например, Label) вместо TextBlock и определить неявный стиль таргетинга этого типа.

В противном случае, вы могли бы поставить свой стиль в рамках шаблона в вопросе, перемещая его в словарь ресурсов шаблона:

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

Спасибо! Я думал, что попробовал поставить Style в HDT.Resources, но я, должно быть, поместил их в другое место ... Полезная ссылка тоже. – Number8