XAML: desencadenadores
Básicamente, un disparador le permite cambiar los valores de una propiedad o realizar acciones según el valor de una propiedad. Entonces, básicamente le permite cambiar dinámicamente la apariencia y / o comportamiento de su control sin tener que crear uno nuevo.
Los desencadenadores se utilizan para cambiar el valor de una propiedad determinada, cuando se cumplen determinadas condiciones. Los disparadores generalmente se definen en un estilo o en la raíz de un documento que se aplican a ese control específico. Hay tres tipos de desencadenantes:
- Activadores de propiedad
- Disparadores de datos
- Activadores de eventos
Activadores de propiedad
En los disparadores de propiedad, cuando ocurre un cambio en una propiedad, traerá un cambio inmediato o animado en otra propiedad. Por ejemplo, puede usar un activador de propiedad si desea cambiar la apariencia del botón cuando el mouse está sobre el botón.
Ejemplo
El siguiente ejemplo demuestra cómo cambiar el color de primer plano de un botón cuando el mouse entra en su región.
<Window x:Class = "XAMLPropertyTriggers.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<Window.Resources>
<Style x:Key = "TriggerStyle" TargetType = "Button">
<Setter Property = "Foreground" Value = "Blue" />
<Style.Triggers>
<Trigger Property = "IsMouseOver" Value = "True">
<Setter Property = "Foreground" Value = "Green" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Button Width = "100" Height = "70" Style = "{StaticResource TriggerStyle}"
Content = "Trigger"/>
</Grid>
</Window>
Cuando compile y ejecute el código anterior, producirá el siguiente resultado:
Cuando el mouse ingresa a la región del botón, el color de primer plano cambiará a verde.
Disparadores de datos
Un disparador de datos realiza alguna acción cuando los datos vinculados satisfacen alguna condición. Echemos un vistazo al siguiente código XAML en el que se crean una casilla de verificación y un bloque de texto con algunas propiedades. Cuando la casilla de verificación está marcada, cambiará el color de primer plano a rojo.
<Window x:Class = "XAMLDataTrigger.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "Data Trigger" Height = "350" Width = "604">
<StackPanel HorizontalAlignment = "Center">
<CheckBox x:Name = "redColorCheckBox" Content = "Set red as foreground color" Margin = "20"/>
<TextBlock Name = "txtblock" VerticalAlignment = "Center"
Text = "Event Trigger" FontSize = "24" Margin = "20">
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding = "{Binding ElementName = redColorCheckBox, Path = IsChecked}"
Value = "true">
<Setter Property = "TextBlock.Foreground" Value = "Red"/>
<Setter Property = "TextBlock.Cursor" Value = "Hand" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</Window>
Cuando compile y ejecute el código anterior, producirá el siguiente resultado:
Cuando la casilla de verificación está marcada, el color de primer plano del bloque de texto cambiará a rojo.
Activadores de eventos
Un activador de evento realiza alguna acción cuando se activa un evento específico. Por lo general, se usa para realizar alguna animación como DoubleAnimation, ColorAnimation, etc. El siguiente bloque de código crea un botón simple. Cuando se activa el evento de clic, expandirá el ancho y el alto del botón.
<Window x:Class = "XAMLEventTrigger.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<Button Content = "Click Me" Width = "60" Height = "30">
<Button.Triggers>
<EventTrigger RoutedEvent = "Button.Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty = "Width" Duration = "0:0:4">
<LinearDoubleKeyFrame Value = "60" KeyTime = "0:0:0"/>
<LinearDoubleKeyFrame Value = "120" KeyTime = "0:0:1"/>
<LinearDoubleKeyFrame Value = "200" KeyTime = "0:0:2"/>
<LinearDoubleKeyFrame Value = "300" KeyTime = "0:0:3"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty = "Height" Duration = "0:0:4">
<LinearDoubleKeyFrame Value = "30" KeyTime = "0:0:0"/>
<LinearDoubleKeyFrame Value = "40" KeyTime = "0:0:1"/>
<LinearDoubleKeyFrame Value = "80" KeyTime = "0:0:2"/>
<LinearDoubleKeyFrame Value = "150" KeyTime = "0:0:3"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
</Window>
Cuando compile y ejecute el código anterior, producirá el siguiente resultado:
Ahora, haga clic en el botón y observará que comenzará a expandirse en ambas dimensiones.