How to combine property-triggers and data-triggers in WPF is not quite clear from the documentation.
Property-trigger that changes the color of a buttons background
A property-trigger is a trigger that works with the visisble element properties of WPF. Button has among others an IsMouseOver-property.
<Style TargetType="{x:Type Button}">
<Setter Property="Button.Background" Value="AliceBlue" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Button.Background" Value="Yellow" />
</Trigger>
</Style.Triggers>
</Style>
Data-trigger that changes the color of a buttons background
A data-trigger is a trigger that works with the properties of my own objects. My user object below has a Name and a Role property.
public class User {
private string name;
private string role;
public string Name {
get { return name; }
set { name = value; }
}
public string Role {
get { return role; }
set { role = value; }
}
}
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Role}" Value="Admin">
<Setter Property="Button.Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
A combined property-trigger and a data-trigger that changes the color of a buttons background
If I want to combine the two triggers above to check if the role is admin and the mouse is over there is no straightforward way to do this, so I have to resort to this.
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<!-- This binding refers to the actual WPF element. -->
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
<Condition Binding="{Binding Path=Role}" Value="Admin"/>
</MultiDataTrigger.Conditions>
<Setter Property="Button.Background" Value="Orange" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
4 comments:
Absolute Gold.
Thanks!!!!!!!!!!!!!!!!!!!!!
Very helpful indeed
I didn't understand a good use for a multitrigger until i saw your post here. I was able to take your sample source and translate it into something that I can use.
Thanks for taking the time to share some info for MultiTriggers!
Post a Comment