En WPF, ¿importa el orden de los Disparadores?


Tengo el siguiente xaml:

<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 sucede es que cuando paso el ratón sobre el botón, el primer plano cambia a amarillo y luego cuando presiono el botón, el primer plano cambia a verde.

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

¿Cuál es la explicación para esto? ¿Un disparador anula el otro?

Author: Dave Clemmer, 2009-02-18

2 answers

WPF está procesando sus disparadores en orden declarado. En el segundo ejemplo, el primer plano se cambia brevemente a verde. Pero entonces el gatillo 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 disparadores.

 64
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-18 14:12:56

En resumen: los disparadores se procesan en orden.

Los disparadores posteriores' pueden anular los disparadores anteriores.

 9
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-26 08:29:25