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 then 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 trigger overriding the other?
The WPF styling and templating model enables you to specify triggers within your Style. Essentially, triggers are objects that enable you to apply changes when certain conditions (such as when a certain property value becomes true , or when an event occurs) are satisfied.
Basically, there are 3 types of triggers, they are: Property Trigger. Data Trigger. Event Trigger.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With