c# - Style.Triggers vs ControlTemplate.Triggers
wpf xaml (1)
La actualización desde el fondo no cambia el botón C # WPF. El botón en Windows 8 usa un ControlTemplate.Trigger para IsMouseOver, por lo que hay casos en que ControlTemplate
deba ser completamente sobrescrito para obtener la funcionalidad deseada. Por lo tanto, ese sería un caso en el que necesita utilizar los desencadenadores ControlTemplate sobre los desencadenadores de estilo.
Es posible que no siempre tenga que anular la ControlTemplate
predeterminada. Supongamos que tiene un control y desea que todo MyTextControl tenga un Foreground
azul cuando IsMouseOver
sea ​​verdadero y deje todo lo demás como predeterminado. Podrías usar algo como esto:
<Style TargetType="{x:Type MyTextControl}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
Si quisiera usar ControlTemplate.Triggers
, tendría que copiar la Template
MyTextControl
predeterminada o, de lo contrario, terminaría sin visual.
Aparte de eso, creo que la única diferencia es que Style.Triggers
tiene una prioridad más baja que ControlTemplate.Triggers
(documentación de precedencia ). Pero eso solo importaría si usas ambos tipos de disparador.
¿Cuándo debo elegir Style.Triggers
y cuándo debo elegir ControlTemplate.Triggers
? ¿Hay algún beneficio usando uno sobre el otro?
Digamos que tengo estos estilos que logran el mismo resultado:
<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>