tags:

views:

337

answers:

1

I have the following 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>

What happens is that when I mouse over the button, the foreground changes to yellow and when I press the button, the foreground changes to green.

Now, if I reverse the order of my triggers in the XAML, the foreground changes to yellow when I mouse over it, but when I press the button, the foreground does NOT change to green.

What is the explanation for this? Is one overriding the other?

+9  A: 

WPF is processing your triggers in declared order. In the second example the foreground is ever so briefly changed to green. But then the IsMouseOver trigger runs and sets the color back to yellow.

IsMouseOver has no relationship to IsPressed in terms of precedence. What's important is the declaration order in XAML of the triggers.

JaredPar
Thanks Jared, that explains it perfectly
Scott