2009-02-18 14 views
44

Ho il seguente XAML:In WPF, l'ordine dei trigger è importante?

<DockPanel> 
    <DockPanel.Resources> 
     <Style TargetType="Button"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Foreground" Value="Yellow"></Setter> 
       </Trigger> 
       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="Foreground" Value="Green"></Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DockPanel.Resources> 
    <Button Content="Cut" Height="30" Width="75"/> 
</DockPanel> 

Quello che succede è che quando il mouse sopra il pulsante, i cambiamenti in primo piano diventa giallo e poi, quando si preme il pulsante, i cambiamenti di primo piano a verde.

Ora, se inverto l'ordine dei miei trigger in XAML, il primo piano diventa giallo quando si passa il mouse su di esso, ma quando premo il pulsante, il primo piano NON cambia in verde.

Qual è la spiegazione per questo? Un grilletto ha la precedenza sull'altro?

+0

Spero davvero che non sia l'unico programmatore a perdere alcune ore a causa di questo ... https://stackoverflow.com/questions/47006674/listboxitem-alternationindex-trigger-overrides-isselected-trigger/47006716 # 47006716 – Krythic

risposta

58

WPF sta elaborando i trigger in ordine dichiarato. Nel secondo esempio, il primo piano è sempre stato brevemente modificato in verde. Ma poi il trigger IsMouseOver viene eseguito e il colore torna a giallo.

IsMouseOver non ha alcun rapporto con IsPressed in termini di precedenza. Ciò che è importante è l'ordine di dichiarazione in XAML dei trigger.

+0

Grazie Jared, questo lo spiega perfettamente – ScottG

+0

Potrei averti usato circa quattro ore fa: https://stackoverflow.com/questions/47006674/listboxitem-alternationindex-trigger-overrides-isselected-trigger/47006716#47006716 – Krythic

7

In breve: i trigger vengono elaborati in ordine.

I trigger successivi possono ignorare i trigger precedenti.

Problemi correlati