When should I choose Style.Triggers
and when should I choose ControlTemplate.Triggers
? Are there any benefits using one over another?
Say I have these styles that achieve the same result:
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ControlTemplate.Triggers>
...
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
...
</Setter>
<Style.Triggers>
...
</Style.Triggers>
</Style>
Update from Background does not change of button C# WPF the Button in windows 8 does use a ControlTemplate.Trigger for IsMouseOver so there are cases where ControlTemplate
may need to be completely overwritten to get the desired functionality. So that would be a case where you need to use ControlTemplate triggers over Style triggers.
You may not always need to override the default ControlTemplate
. Say you have a control and you want all the MyTextControl to have a a blue Foreground
when IsMouseOver
is true and leave everything else as default. You could use something like this:
<Style TargetType="{x:Type MyTextControl}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
If you wanted to use the ControlTemplate.Triggers
you would need to copy the default MyTextControl
Template
or else you would end up with no visual.
Aside from that I think the only difference is that Style.Triggers
has a lower precedence than ControlTemplate.Triggers
(Precedence documentation). But that would only matter if you use both trigger types.
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