2009-10-28 13 views
6

Ho la seguente XAML:DataTrigger non sparare

<DockPanel> 
    <DockPanel> 
     <CheckBox IsChecked="{Binding Path=Test}" /> 
     <CheckBox IsChecked="{Binding Path=Test}" /> 
    </DockPanel> 
    <DockPanel DockPanel.Dock="Left" Width="10" Background="Blue"> 
     <DockPanel.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=Test}" Value="True"> 
         <Setter Property="DockPanel.Background" Value="Yellow" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DockPanel.Style> 
    </DockPanel> 
</DockPanel> 

ora - le 2 caselle collegamento correttamente - controllare uno controllerà l'altro - ma il DataTrigger non sta sparando a tutti.

Cosa sto sbagliando?

risposta

18

Il problema è Property Value Precedence.

Attualmente stai impostando lo sfondo su blu direttamente sul DockPanel. Questa proprietà esplicita sovrascriverà qualsiasi valore impostato dal trigger.

Invece, è necessario impostare lo "sfondo" originale come setter nello stile.

<DockPanel DockPanel.Dock="Left" Width="10"> 
     <DockPanel.Style> 
      <Style> 
       <Setter 
         Property="DockPanel.Background" 
          Value="Blue" /> 
       <Style.Triggers>      
        <DataTrigger 
          Binding="{Binding Path=Test}" 
          Value="True">       
        <Setter 
         Property="DockPanel.Background" 
          Value="Yellow" />      
        </DataTrigger>    </Style.Triggers>   </Style>  </DockPanel.Style> </DockPanel></DockPanel> 
+0

Grazie! - È sempre divertente solo quella piccola svista che rende tutto ciò che non funziona. – John

+0

Grazie, ho passato 10 thread SO e tu avevi la risposta che mi serviva :). –

+0

@Andrew Shepherd Tu, signore, sei una leggenda! – TuanDT