WPF - Activadores

Básicamente, un activador le permite cambiar los valores de una propiedad o realizar acciones en función del valor de una propiedad. Por lo tanto, le permite cambiar dinámicamente la apariencia y / o el 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 disparador de propiedad para cambiar la apariencia de un botón cuando el mouse se desplaza sobre el botón.

El siguiente código de ejemplo muestra cómo cambiar el color de primer plano de un botón cuando el mouse pasa sobre el botón.

<Window x:Class = "WPFPropertyTriggers.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á la siguiente ventana:

Cuando el mouse pasa sobre el botón, su color de primer plano cambiará a verde.

Disparadores de datos

Un disparador de datos realiza algunas acciones cuando los datos enlazados cumplen algunas condiciones. 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á su color de primer plano a rojo.

<Window x:Class = "WPFDataTrigger.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 el código anterior se compila y ejecuta, producirá el siguiente resultado:

Cuando marca la casilla de verificación, el bloque de texto cambiará su color de primer plano a rojo.

Activadores de eventos

Un activador de eventos realiza algunas acciones cuando se activa un evento específico. Suele utilizarse para realizar alguna animación en el control como DoubleAnumatio, ColorAnimation, etc. En el siguiente ejemplo, crearemos un botón simple. Cuando se activa el evento de clic, expandirá el ancho y la altura del botón.

<Window x:Class = "WPFEventTrigger.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á la siguiente ventana:

Al hacer clic en el botón, observará que comenzará a expandirse en ambas dimensiones.

Le recomendamos que compile y ejecute los ejemplos anteriores y aplique los desencadenadores a otras propiedades también.