Buscar..
Introducción
Discusión sobre los diversos tipos de activadores disponibles en WPF, incluidos Trigger
, Trigger
, Trigger
DataTrigger
, MultiTrigger
MultiDataTrigger
y EventTrigger
.
Los desencadenadores permiten que cualquier clase que se derive de FrameworkElement
o FrameworkContentElement
establezca o cambie sus propiedades en función de ciertas condiciones definidas en el desencadenante. Básicamente, si un elemento se puede diseñar, también se puede activar.
Observaciones
- Todos los activadores, excepto
EventTrigger
deben definirse dentro de un elemento<Style>
. UnEventTrigger
se puede definir en un elemento<Style>
o en la propiedadTriggers
un control. -
<Trigger>
elementos<Trigger>
pueden contener cualquier número de elementos<Setter>
. Estos elementos son responsables de configurar las propiedades en el elemento que contiene cuando se cumple la condición del elemento<Trigger>
. - Si se define una propiedad en la marca del elemento raíz, el cambio de propiedad definido en el elemento
<Setter>
no tendrá efecto, incluso si se cumple la condición de activación. Considere el marcado<TextBlock Text="Sample">
. La propiedad deText
del código de procedimiento nunca cambiará en función de un desencadenante porque las definiciones de propiedades de raíz tienen prioridad sobre las propiedades definidas en estilos. - Al igual que los enlaces, una vez que se ha utilizado un activador, no se puede modificar.
Desencadenar
El más simple de los cinco tipos de activadores, el Trigger
es responsable de establecer propiedades basadas en otras propiedades dentro del mismo control .
<TextBlock>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="Pass">
<Setter Property="Foreground" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
En este ejemplo, el color de primer plano del TextBlock
volverá verde cuando su propiedad Text
sea igual a la cadena "Pass"
.
MultiTrigger
Un MultiTrigger
es similar a un Trigger
estándar en que solo se aplica a las propiedades dentro del mismo control . La diferencia es que un MultiTrigger
tiene múltiples condiciones que deben cumplirse antes de que funcione el gatillo. Las condiciones se definen utilizando la etiqueta <Condition>
.
<TextBlock x:Name="_txtBlock" IsEnabled="False">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value="Pass"/>
<Condition Property="IsEnabled" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Foreground" Value="Green"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Observe que el MultiTrigger
no se activará hasta que se cumplan ambas condiciones.
Data Trigger
Un DataTrigger
se puede adjuntar a cualquier propiedad, ya sea bajo su propio control, otro control, o incluso una propiedad en una clase que no sea UI. Considere la siguiente clase simple.
public class Cheese
{
public string Name { get; set; }
public double Age { get; set; }
public int StinkLevel { get; set; }
}
Que adjuntaremos como el DataContext
en el siguiente TextBlock
.
<TextBlock Text="{Binding Name}">
<TextBlock.DataContext>
<local:Cheese Age="12" StinkLevel="100" Name="Limburger"/>
</TextBlock.DataContext>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding StinkLevel}" Value="100">
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
En el código anterior, la propiedad TextBlock.Foreground
será verde. Si cambiamos la propiedad StinkLevel
en nuestro XAML a algo distinto a 100, la propiedad Text.Foreground
volverá a su valor predeterminado.