2010-02-10 14 views

Respuesta

20

un disparador se utiliza típicamente en un estilo o ControlTemplate. Se desencadena en las propiedades de la cosa que se está modelando y establece otras propiedades del control (o de elementos de plantilla específicos). Por ejemplo, usaría un disparador en IsMouseOver para responder que el mouse está sobre el control, y los setters podrían actualizar un pincel para mostrar un efecto "caliente".

Un DataTrigger se desencadena en un enlace de datos en lugar de en una propiedad de control. Normalmente se usa en una plantilla de datos. Por ejemplo, podría usar un DataTrigger para cambiar el color de un elemento en el DataTemplate si la propiedad AlertLevel era igual a ZomgWereAllGoingToDie. DataTriggers también puede ser útil en plantillas de control si desea activar una propiedad de control "convertida" (es decir, utilizar un IValueConverter en la prueba de activación). Por ejemplo, podría usar un DataTrigger para convertir el primer plano de TextBox en rojo si la propiedad Text, considerada como un número, era negativa, usando un DataTrigger con un IValueConverter adecuado y un RelativeSource de Self o TemplatedParent.

MultiTrigger y MultiDataTrigger son lo mismo, excepto que le permiten especificar múltiples condiciones (propiedades o enlaces, respectivamente) y surten efecto solo cuando se cumplen todas las condiciones.

Finalmente, EventTrigger se usa para desencadenar acciones en respuesta a eventos (en lugar de cambiar un estado en respuesta a otro estado). Por ejemplo, podría usar un EventTrigger para responder al evento MouseEnter. EventTriggers se utilizan generalmente para ejecutar guiones gráficos, por ejemplo, para realizar una animación cuando se produce el evento.

+0

+1 Respuesta completa con ejemplos agradables. – statenjason

+0

¡Thx! Muy clarificador ¡Justo lo que necesitaba! – stiank81

+0

Deseo que los libros técnicos utilicen más ejemplos. Útil cuando solo quiere hojear los temas. – arviman

10

A Trigger se usa generalmente en un Style o ControlTemplate. Se desencadena en las propiedades de lo que se está modelando y establece otras propiedades del control (o de elementos de plantilla específicos). Por ejemplo, utilizaría un disparador en IsMouseOver para responder que el mouse está sobre el control, y el setters podría actualizar un pincel para mostrar un efecto "caliente".

¿Por qué usar Trigger?

Los activadores se utilizan en estilos para realizar acciones en un cambio de cualquier valor de propiedad o incendios de evento. Los desencadenantes crean efectos visuales en los controles. Al usar Triggers, podemos cambiar la apariencia de los Elementos del Marco.

¿Cuántos tipos de desencadenantes hay en WPF?

Hay cinco tipos de activadores admitidos por WPF; que son:

  1. propiedad de disparo
  2. Trigger Data
  3. MultiTrigger
  4. MultiDataTrigger
  5. evento de disparo

propiedad de disparo

La forma más simple de un desencadenador es un desencadenante de propiedad, que busca que una propiedad de dependencia tenga un cierto valor. Por ejemplo, si quisiéramos encender un botón en amarillo a medida que el usuario mueve el mouse sobre él, podemos hacer eso al observar que la propiedad IsMouseOver tenga un valor de "True".

Property Trigger Ejecuta Colecciones de Setters, cuando cambia el valor de propiedad de UIElements.

Para crear un disparador de propiedad en cualquier control, debe establecer el activador en el estilo del control.

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter Property="Opacity" Value="0.5" /> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

En el código anterior, Trigger creado en el botón. Establecerá Opacity en 0.5 cuando cambie la propiedad Botones IsPressed. puede establecer el desencadenador en cualquier Propiedad de dependencia del control. p.

<Style x:Key="NormalStyle"> 
      <Setter Property="Control.FontSize" Value="20"></Setter> 
      <Setter Property="Control.HorizontalAlignment" Value="Center"></Setter> 
      <Setter Property="Control.Margin" Value="10"></Setter> 
      <Setter Property="Control.Foreground" Value="Black"></Setter> 
            <Style.Triggers> 
                <Trigger Property="Control.IsMouseOver" Value="true"> 
                    <Setter Property="Control.FontStyle" Value="Italic"></Setter> 
                    <Setter Property="Control.Foreground" Value="Red"></Setter> 
                    <Setter Property="Control.Background" Value="Yellow"></Setter> 
                </Trigger> 
                <Trigger Property="Button.IsPressed" Value="true"> 
                    <Setter Property="Control.Foreground" Value="Green"></Setter> 
                    <Setter Property="Control.Background" Value="Blue"></Setter> 
                </Trigger>               
            </Style.Triggers> 
     </Style> 

MultiTrigger

MultiTrigger se utiliza para establecer la acción sobre el cambio de la propiedad múltiple. Se ejecutará cuando todas las condiciones se cumplan dentro de MulitTrigger. Condición.

<Style x:Key="MulitTriggerButtonStyle" TargetType="Button"> 
    <Style.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="IsPressed" Value="True" /> 
       <Condition Property="Background" Value="BlanchedAlmond" /> 
      </MultiTrigger.Conditions> 
      <MultiTrigger.Setters> 
       <Setter Property="Foreground" Value="Blue" /> 
       <Setter Property="BorderThickness" Value="5" /> 
       <Setter Property="BorderBrush" Value="Blue" /> 
      </MultiTrigger.Setters> 
     </MultiTrigger> 
    </Style.Triggers> 
</Style> 

evento de disparo

Event Trigger utilizado realizar la acción cuando RoutedEvent de FrameworkElement aumento. Event Trigger utiliza generalmente para realizar una animación en el control (como: ColorAnimation, doubleAnumation usando KeyFrame etc.)

primero vamos a entender Storyboard y Animation.

Animations:

Una animación puede proporcionar la interfaz de usuario más atractiva con la apariencia. También podemos crear efectos visuales en el control, la animación puede ser de cualquier tipo, como:

 cambio de color de fondo del control  pantalla de rotación de 90 grados de ángulo  objeto se mueva de un lugar a otro  Cambio de opacidad (FadeIn/FadeOut) del círculo.

La animación se utiliza con Property of the UIElement.WPF proporciona diferentes tipos de animación utilizados con propiedades, como:

ColorAnimation: utilizado para animar/cambiar la propiedad de color (SolidColorBrush, LinearGradientBrush) de la UIElement sobre Duración específico. Tiene dos propiedades:

De (fuente) y A (objetivo)

<Border Name="border1" Width="100" Height="30" 
    BorderBrush="Black" BorderThickness="1"> 
    <Border.Background> 
     <SolidColorBrush x:Name="MyBorder" Color="LightBlue" /> 
    </Border.Background> 
    <Border.Triggers> 
     <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
      <BeginStoryboard> 
       <Storyboard> 
       <ColorAnimation Duration="0:0:1" 
        Storyboard.TargetName="MyBorder" 
        Storyboard.TargetProperty="Color" To="Gray" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Border.Triggers> 
</Border> 

Ejemplo 2:

<TextBlock Visibility="Collapsed" Style="{StaticResource CDCStandardTextBlockStyle}" Name="TxtBlockTerminatingHeading" Text="{Binding NotifyOnTargetUpdated=True}" Foreground="Red" TextWrapping="Wrap" Margin="10,10,10,0"> 
<TextBlock.Triggers> 
        <EventTrigger RoutedEvent="Binding.TargetUpdated"> 
         <EventTrigger.Actions> 
          <BeginStoryboard> 
           <Storyboard BeginTime="00:00:00" RepeatBehavior="Forever" 
Storyboard.TargetName="TxtBlockTerminatingHeading" 
Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)"> 
            <ColorAnimation From="Red" To="#f0f0f0" 
Duration="0:0:1"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger.Actions> 
        </EventTrigger> 
       </TextBlock.Triggers> 
      </TextBlock> 

Ejemplo 3:

<ListBox Name="employeeListBox" ItemsSource="{Binding 
empList}" Grid.Row="0" SelectedItem="{Binding SelectedIndex}"> 
      <i:Interaction.Triggers> 
        <i:EventTrigger EventName="SelectionChanged"> 
          <i:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding 
ElementName=employeeListBox, Path=SelectedValue}"/> 
        </i:EventTrigger> 
      </i:Interaction.Triggers> 
    </ListBox> 

DataTrigger

DataTriggers son desencadenantes que miran un valor dependiente en lugar de DependencyProperty. Le permiten ver una expresión encuadernada, y reaccionarán cuando ese enlace se evalúe igual a su valor. Como su nombre lo sugiere, DataTrigger aplica el valor de propiedad para realizar una acción en los datos que vinculan al UIElement. DataTrigger permite establecer el valor de propiedad cuando los datos de enlace coinciden con las condiciones especificadas. Por ejemplo:

<DataTemplate> 
    <Grid Margin="0 5 0 0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <Image x:Name="viewImage" 
      Grid.Row="0" Width="100"    
      Height="60" HorizontalAlignment="Center"    
      Source="{Binding Picture}" Stretch="Fill" />    
     <TextBlock x:Name="viewText" 
      Grid.Row="1" Margin="0 5 0 0"    
      HorizontalAlignment="Center" 
      FontWeight="Black" Foreground="Green"    
      Text="{Binding Title}" /> 
    </Grid> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding Path=Picture}" Value="{x:Null}"> 
     <Setter TargetName="viewImage" Property="Source" Value="/Images/noImage.png" /> 
     <Setter TargetName="viewText" Property="Text" Value="No Image Available" /> 
     <Setter TargetName="viewText" Property="Foreground" Value="Red" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 
<Style.Triggers> 
                <DataTrigger Binding="{Binding ElementName=textBox1, Path=Text.Length}" 
Value="0"> 
                    <Setter Property="IsEnabled" Value="False"></Setter> 
                </DataTrigger> 
      </Style.Triggers> 
     </Style> 

MultiDataTrigger

MultiTrigger y MultiDataTrigger son los mismos, salvo que le permiten especificar varias condiciones (propiedades o atascamientos, respectivamente) y se hacen efectivas sólo cuando se cumplan todas las condiciones.

<DataTemplate.Triggers> 
    <MultiDataTrigger> 
     <MultiDataTrigger.Conditions> 
      <Condition Binding="{Binding Path=Picture}" Value="{x:Null}" /> 
      <Condition Binding="{Binding Path=Title}" Value="Waterfall" /> 
     </MultiDataTrigger.Conditions> 
     <MultiDataTrigger.Setters> 
      <Setter TargetName="viewImage" Property="Source" Value="/Images/noImage.png"/> 
      <Setter TargetName="viewImage" Property="Opacity" Value="0.5" /> 
      <Setter TargetName="viewText" Property="Background" Value="Brown" /> 
     </MultiDataTrigger.Setters> 
    </MultiDataTrigger> 
</DataTemplate.Triggers> 
Cuestiones relacionadas