Definición
Un Trigger es un desencadenador de una determinada Acción.
Va a permitir cambiar el valor de alguna propiedad o comenzar una animación existente, cuando se cumpla una determinada condición.
Tipos
Existen distintos tipos de Triggers:
=> Trigger simple: Sucede cuando una determinada Propiedad presenta un valor indicado. Ejemplo:
1: <Triggers>
2: <Trigger Property="IsSelected" Value="True">
3: <Setter TargetName="desc" Property="Foreground" Value="Blue"/>
4: </Trigger>
5: </Triggers>
La explicación sería: Cuando la propidad IsSelected (el ejemplo es para un Item de un ListBox) se establece a True, cambiaremos la propiedad Foreground al color Azul en el objeto “desc”.
Dentro del contenido del Trigger, podremos establecer tantos “Setters” como necesitemos.
Se pueden utilizar las propiedades EnterActions y ExitActions del Trigger, para definir el comportamiento al lanzarse el Trigger, y cuando vuelve al valor original.
=> EventTrigger: se desencadena cuando un evento sucede. Ejemplo:
1: <Rectangle Fill="Red" Height="176" HorizontalAlignment="Left" Margin="94,94,0,0"
2: Name="rectangle1" Stroke="Black" VerticalAlignment="Top" Width="316">
3: <Rectangle.Triggers>
4: <EventTrigger RoutedEvent="Rectangle.Loaded">
5: <BeginStoryboard>
6: <Storyboard>
7: <DoubleAnimation
8: Storyboard.TargetName="rectangle1"
9: Storyboard.TargetProperty="Opacity"
10: From="0.0" To="1.0" Duration="0:0:2" />
11: <DoubleAnimation Storyboard.TargetName="rectangle1"
12: Storyboard.TargetProperty="Width" BeginTime="0:0:2"
13: From="316" To="400" Duration="0:0:3"/>
14: </Storyboard>
15:
16: </BeginStoryboard>
17: </EventTrigger>
18: </Rectangle.Triggers>
19: </Rectangle>
La explicación sería: Cuando se produzca el evento Loaded del rectángulo, haremos que se haga visible de forma gradual, y lo moveremos a la derecha desde su posición inicial.
=> MultiTrigger: se desencadenan cuando un conjunto de condiciones se cumplen. Ejemplo:
1: <ListBox >
2: <ListBox.Style>
3: <Style>
4: <Style.Triggers>
5:
6:
7: <MultiTrigger>
8: <MultiTrigger.Conditions>
9: <Condition Property="ListBox.HasItems" Value="False" />
10: <Condition Property="ListBox.Width" Value="Auto" />
11: </MultiTrigger.Conditions>
12: <Setter Property="ListBox.Background" Value="Red"/>
13: </MultiTrigger>
14:
15: </Style.Triggers>
16: </Style>
17: </ListBox.Style>
18: </ListBox>
La explicación sería: Si las propiedades HasItems y Width tienen como valores False y Auto, respectivamente, el color de fondo del ListBox se establecerá a Rojo.
=> DataTrigger y MultiDataTrigger: se desencadenan cuando una o varias condiciones enlazadas a datos se cumplen.
1: <DataTrigger Binding="{Binding Path=Nombre}" Value="Javier">
2: <Setter Property="Foreground" Value="Green" />
3: </DataTrigger>
1: <MultiDataTrigger>
2: <MultiDataTrigger.Conditions>
3: <Condition Binding="{Binding Path=Nombre}" Value="Javier" />
4: <Condition Binding="{Binding Path=Apellidos}" Value="Torrecilla Puertas" />
5: </MultiDataTrigger.Conditions>
6: <Setter Property="ForeGround" Value="DarkBlue" />
7: </MultiDataTrigger>
Conclusión
Los trigger, nos va a permitir de forma cómoda el cambio de ciertas propiedades directamente desde el código XAML, sin tener que escribir código C# o VB.
Espero que os sea de utilidad.
Fuentes: Trigger en MSDN