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>
Absolute Gold.
ReplyDeleteThanks!!!!!!!!!!!!!!!!!!!!!
ReplyDeleteVery helpful indeed
ReplyDeleteI 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.
ReplyDeleteThanks for taking the time to share some info for MultiTriggers!
Thanks mate...this is really helpful. This saved me lot of time.
ReplyDelete@Pali, I'm glad it is still helping people.
ReplyDeleteStill helping people!
ReplyDeleteCheers for this example!
Edgar
@Edgar, Cheers!
ReplyDeleteVery helpful post, and also nice implementation - easy to use and very straightforward
ReplyDeleteThanks a lot!
@Imaver I'm glad it helped!
ReplyDeleteMany thanks Anders
ReplyDelete@Mak, glad to help!
ReplyDeleteThanks man!!
ReplyDeleteThis helped me.
Tackar tackar! :)
ReplyDelete@David, kul att det hjälpte dig!
ReplyDeleteThanks bro, this was just what I needed!
ReplyDeleteSeriously brilliant. Thank you.
ReplyDelete@Kelly, you're welcome.
ReplyDeleteThanks!!! Really Helpful.. I was stuck into this.
ReplyDeleteNice thanks I woulda been scratching my head for a while!
ReplyDelete@feral, You are welcome, I'm glad it helped you.
ReplyDeleteYeeeeeeeees a solution for my current problem! Searched for about two hours to find this article but now everything works. Thanks a lot! :)
ReplyDelete@Torben, you're welcome :)
ReplyDeleteThanks mate
ReplyDeleteOne more trigger type from Dr WPF - EventTrigger - http://drwpf.com/blog/2009/05/12/itemscontrol-l-is-for-lookless/#IntroToTriggers
ReplyDeleteFalse
Thanks it worked
ReplyDeleteShort and clear, straight to the point. Thanks!
ReplyDeleteBrilliantly simple!
ReplyDeleteThanks/Tackar!
Thanks! This really helped me out.
ReplyDeleteSimple and straightforward explanation!
@Rene, @CuteD34th. You are welcome, I'm glad it helped you.
ReplyDeleteJust wanted to say, this post helped me after 6 hours of searching on the internet. Thanks!
ReplyDelete@David, I'm glad it helped you. You're welcome!
ReplyDeleteStill helpful :)
ReplyDelete