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> . Un EventTrigger se puede definir en un elemento <Style> o en la propiedad Triggers 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 de Text 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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow