2009-02-18 13 views
44

Tengo el siguiente XAML:En WPF, ¿importa el orden de los desencadenantes?

<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> 

Lo que pasa es que cuando me ratón sobre el botón, los cambios de primer plano a amarillo y luego al pulsar el botón, cambia el primer plano a verde.

Ahora, si invierto el orden de mis activadores en el XAML, el primer plano cambia a amarillo cuando lo paso sobre él, pero cuando presiono el botón, el primer plano NO cambia a verde.

¿Cuál es la explicación para esto? ¿Hay un gatillo que anula al otro?

+0

Realmente espero no ser el único programador que perdió unas pocas horas debido a esto ... https://stackoverflow.com/questions/47006674/listboxitem-alternationindex-trigger-overrides-isselected-trigger/47006716 # 47006716 – Krythic

Respuesta

58

WPF está procesando los desencadenantes en orden declarado. En el segundo ejemplo, el primer plano se cambia tan brevemente a verde. Pero luego el disparador IsMouseOver se ejecuta y establece el color de nuevo a amarillo.

IsMouseOver no tiene relación con IsPressed en términos de precedencia. Lo importante es el orden de declaración en XAML de los factores desencadenantes.

+0

Gracias Jared, eso lo explica perfectamente – ScottG

+0

Podría haberte usado hace unas cuatro horas: https://stackoverflow.com/questions/47006674/listboxitem-alternationindex-trigger-overrides-isselected-trigger/47006716#47006716 – Krythic

7

En resumen: los desencadenantes se procesan en orden.

Disparadores posteriores 'pueden anular los activadores anteriores.

Cuestiones relacionadas