c# wpf xaml styles controltemplate

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>