2013-04-29 9 views
7

Una cosa particolare circa FindAncestor mi confonde, hanno uno sguardo al seguente esempio:WPF FindAncestor nel legame

<Expander.HeaderTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <Label Name="headerLabel" Content="Show Contents" Padding="0" VerticalAlignment="Center" /> 
      <Button Name="headerButton" Margin="6,0,0,0" Content="Button" Padding="6,1" /> 
     </StackPanel> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Expander}}, Path=IsExpanded}" Value="True"> 
       <Setter TargetName="headerLabel" Property="Content" Value="Hide Contents" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
</Expander.HeaderTemplate> 

io uso il codice XAML sopra per modificare il testo della mia intestazione expander personalizzato. La mia domanda è, quando devo effettivamente usare FindAncestor in modo esplicito quando voglio usare una proprietà di un antenato nella mia associazione? Perché i seguenti tre attacchi sembrano produrre lo stesso risultato in mio scenario almeno: un sacco

Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Expander}}, Path=IsExpanded}" 

Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Path=IsExpanded}" 

Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Expander}}, Path=IsExpanded}" 

ho visto di esempi di tutti e tre, è solo una questione di gusto personale?

risposta

Problemi correlati