Triggers en WPF

Los Triggers en Windows Presentation Foundation surgen como necesidad de
disponer  de  mecanimos  con  los  que  pudiesemos  responder  mediante  un
eventos o asignacion de valor o cualquier acción a un evento en específico.
Por esto se dispone de distintos tipos de triggers donde podemos destacar los
siguientes tres: Property triggers, Data triggers y Event triggers.
Estos tres tipos de triggers no están disponibles en todas las clases a traves de
la  propiedad  que  exponen  de  nombre  Triggers,  a  saber,  la  clase
FrameworkElement  solo  soporta  Event  Triggers  sin  embargo;  Style,
DataTemplate y ControlTemplate acepta los tres tipos de triggers.

 

Property triggers

Es  invocado  cuando  el  valor  de  una  dependency  property  cambia.  Es  decir,
cuando una dependency property tenga un valor determinado, se ejecutará.
En  el  siguiente  ejemplo  podemos  ver  como  un  Property  Trigger  cambia  el
fondo de un botón a verde cuando el ratón pasa por encima, es decir, cuando
la dependency property IsMouseOver cambia de valor a True.

<Style TargetType="{x:Type Button}"> 
  ... 
  <Style.Triggers> 
    <Trigger Property="IsMouseOver" Value="True" > 
       <Setter Property="Background" Value="Green" /> 
    </Trigger> 
  </Style.Triggers> 
</Style> 
Data triggers


Al  igual  que  el  tipo  Property  Triggers,  los  Data  Triggers  son  lanzados  en

función del valor de una propiedad, con  la  salvedad que esta propiedad aquí

puede ser cualquier tipo de .NET.

Mientras  que  los  Property  Triggers  suelen  ser  usados  para  comprobar

propiedades  que  afectan  al  aspecto  visual,  los  Data  Triggers  se  usan

especialmente  para  comprobar  propiedades  que  afectan  más  al  terreno  no

visual, es decir, al contenido.

En el  siguiente ejemplo podemos ver como un Data Trigger cambia el  fondo

de un Textbox en función del valor que tiene la propiedad Text.

 

<Style TargetType="{x:Type TextBox}"> 
   ... 
   <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}"  
                   Value="Rojo"> 
         <Setter Property="Foreground" Value="Red" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}"  
                   Value="Verde"> 
         <Setter Property="Foreground" Value="Green" /> 
      </DataTrigger> 
   </Style.Triggers> 
</Style> 

En este tipo de Triggers disponemos de los MultiTriggers y MutiDataTriggers

que nos aportan la posibilidad de añadir más de una condición al Trigger por

defecto consiguiendo expresar un AND lógico. Para ello estas clases disponen

de  la  propiedad  Conditions  donde  añadiremos  tantas  condiciones  como

desemos. 
En  el  siguiente  ejemplo  veremos  como  el  trigger  se  lanzará  cuando  las

propiedaes HasItems y Width tengan unos determinados valores:

<Style.Triggers> 
   <MultiTrigger> 
      <MultiTrigger.Conditions> 
         <Condition Property="HasItems" Value="false" /> 
         <Condition Property="Width" Value="Auto" /> 
      </MultiTrigger.Conditions> 
      <Setter Property="MinWidth" Value="120"/> 
   </MultiTrigger> 
</Style.Triggers> 
Event triggers


Despues  de  ver  los  dos  tipos  anteriores  de  triggers,  este  Event  Triggers  su

propio  nombre  lo  indica,  no  se  fija  en  propiedades  ya  sea  Dependency

Properties o CLR Properties sino que se fija en eventos.

Cuando  un  Routed  Event  es  lanzado,  un  Event  Trigger  puede  realizar  una

función como consecuencia de ello.

En  el  siguiente  ejemplo  podemos  ver  como  una  animación  es  arrancada

cuando el evento Click es lanzado:

<Style.Triggers> 
   <EventTrigger RoutedEvent="Click"> 
      <EventTrigger.Actions> 
         <BeginAction TargetName="StoryBoard1" /> 
      </EventTrigger.Actions> 
   </EventTrigger> 
</Style.Triggers> 

En el siguiente post veremos un ejemplo de como hacer las animaciones con Trigguers a partir de Blend

3 comentarios sobre “Triggers en WPF”

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *