2016-06-02 19 views
0

Ich habe einen DataTrigger, um den Hintergrund einer TextBox basierend auf einer gebundenen Eigenschaft festzulegen.
Hier ist eine vereinfachte Version des XAML:DataTrigger in Style in HierarchicalDataTemplate funktioniert nicht - 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> 

ich einen Textblock hinzugefügt, um den Wert der IsDirty Eigenschaft anzuzeigen; Wenn dies der Fall ist, bleibt der Hintergrund unverändert.
Ich habe versucht, den Style auf die HierarchicalDataTemplate.Resources zu verschieben, aber das machte keinen Unterschied.
Was übersehe ich?
Dank -

Antwort

1

Das ist, weil implizite Stile Arten nicht abgeleitet von Control Targeting nicht die Vorlage Grenze, das heißt kreuzen nicht innerhalb Vorlagen angewendet, wenn sie nicht innerhalb dieser Vorlage den Rahmen definiert sind. Here's a good post erklären, wie es funktioniert und warum es so funktioniert.

Um die Vorlagengrenze zu überschreiten, sollten Sie einen Typ verwenden, der von Control stammt (z. B. Label) statt TextBlock, und implizite Stilausrichtung für diesen Typ definieren.

Andernfalls könnten Sie Ihren Stil in Rahmen der Vorlage in Frage gestellt, indem sie in die Vorlage Ressourcen Wörterbuch bewegend:

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

Dank! Ich dachte, ich hätte versucht, Stil in die HDT.Resources zu setzen, aber ich muss sie woanders hingelegt haben ... Nützlicher Link auch. – Number8