2010-02-10 20 views

risposta

20

Un trigger è tipicamente utilizzato in uno stile o di ControlTemplate. Si innesca sulle proprietà dell'oggetto sottoposto a modello e imposta altre proprietà del controllo (o di specifici elementi del modello). Ad esempio, dovresti usare un Trigger su IsMouseOver per rispondere al controllo del mouse e i setter potrebbero aggiornare un pennello per mostrare un effetto "caldo".

Un trigger DataTrigger su un collegamento dati anziché su una proprietà di controllo. Viene in genere utilizzato in un DataTemplate. Ad esempio, è possibile utilizzare un DataTrigger per modificare il colore di un elemento nel DataTemplate se la proprietà AlertLevel è uguale a ZomgWereAllGoingToDie. DataTriggers può anche essere utile nei modelli di controllo se si desidera eseguire il trigger su una proprietà di controllo "convertita" (ad esempio, utilizzare un IValueConverter nel test del trigger). Ad esempio, è possibile utilizzare un DataTrigger per trasformare il rosso in primo piano in un oggetto di TextBox se la proprietà Text, considerata come un numero, è negativa, utilizzando un DataTrigger con un IValueConverter adatto e una RelativeSource di Self o TemplatedParent.

MultiTrigger e MultiDataTrigger sono gli stessi, tranne che consentono di specificare più condizioni (proprietà o associazioni rispettivamente) e hanno effetto solo quando tutte le condizioni sono soddisfatte.

Infine, EventTrigger viene utilizzato per attivare azioni in risposta a eventi (anziché modificare un pezzo di stato in risposta a un altro pezzo di stato). Ad esempio, è possibile utilizzare EventTrigger per rispondere all'evento MouseEnter. EventTriggers vengono in genere utilizzati per eseguire gli storyboard, ad esempio per eseguire un'animazione quando si verifica l'evento.

+0

+1 Risposta completa con buoni esempi. – statenjason

+0

Thx! Molto chiarificante. Proprio quello di cui avevo bisogno! – stiank81

+0

I libri tecnici di desideri hanno utilizzato più esempi. Utile quando vuoi solo sfogliare gli argomenti. – arviman

10

A Trigger viene in genere utilizzato in un Style o ControlTemplate. Si innesca sulle proprietà di qualsiasi oggetto viene templato e imposta altre proprietà del controllo (o di specifici elementi del modello). Ad esempio, si utilizzerà un trigger su IsMouseOver per rispondere al controllo del mouse e il setters potrebbe aggiornare un pennello per mostrare un effetto "caldo".

Perché utilizzare Trigger?

I trigger sono utilizzati negli stili per eseguire azioni su una modifica di qualsiasi valore di proprietà o di un evento. I trigger creano effetti visivi sui controlli. Usando Trigger possiamo modificare l'aspetto di Framework Elements.

Quanti tipi di trigger si trovano in WPF?

Esistono cinque tipi di trigger supportati da WPF; essi sono:

  1. proprietà trigger
  2. dati trigger
  3. MultiTrigger
  4. MultiDataTrigger
  5. Trigger Event

proprietà trigger

La forma più semplice di un trigger è un trigger di proprietà, che controlla che una proprietà di dipendenza abbia un determinato valore. Ad esempio, se volessimo accendere un pulsante in giallo mentre l'utente sposta il mouse su di esso, possiamo farlo osservando la proprietà IsMouseOver con il valore "True".

Property Trigger Esegue le raccolte di Setter quando il valore della proprietà UIElements cambia.

Per creare un trigger di proprietà su qualsiasi controllo, è necessario impostare il trigger in base allo stile del controllo.

<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> 

Nel codice di cui sopra, Trigger creato sul pulsante. Imposta Opacity su 0.5 quando i cambiamenti di proprietà dei pulsanti sono IsPressed. è possibile impostare il trigger su qualsiasi proprietà di dipendenza del controllo. ad es.

<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 viene utilizzato per impostare l'azione su più il cambiamento di proprietà. Verrà eseguito quando tutte le condizioni sono soddisfatte entro MulitTrigger .Condizione.

<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 Trigger

Event Trigger utilizzato eseguire un'azione quando RoutedEvent di FrameworkElement sollevano. Event Trigger generalmente utilizzato per eseguire alcune animazioni sul controllo (come: ColorAnimation, doubleAnumation utilizzando KeyFrame ecc)

si deve prima capire Storyboard e Animation.

Animations:

Un'animazione in grado di fornire un'interfaccia utente più attraente con aspetto grafico. Possiamo anche creare effetti visivi sul controllo, animazione può essere qualsiasi tipo come:

 cambiamento di colore di sfondo del controllo  Ruota schermo in angolo di 90 gradi oggetto  passaggio da una posizione a un'altra  modificare l'opacità (FadeIn/FadeOut) del cerchio.

L'animazione viene utilizzata con la proprietà di UIElement.WPF offre diversi tipi di animazione utilizzate con proprietà, come:

ColorAnimation: utilizzato per animare/modificare la proprietà colore (SolidColorBrush, LinearGradientBrush) del UIElement su specifica Durata. Esso ha due proprietà:

Da (sorgente) e A (target)

<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> 

Esempio 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> 

Esempio 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 sono trigger che guardano un valore associato anziché uno DependencyProperty. Ti consentono di guardare un'espressione vincolata e reagiranno quando l'associazione vincerà uguale al tuo valore. Come suggerisce il nome, DataTrigger applica il valore della proprietà per eseguire un'azione su Dati che si associa a UIElement. DataTrigger consente di impostare il valore della proprietà quando Binding Data corrisponde alla condizione specificata. Per esempio:

<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 e MultiDataTrigger sono gli stessi, tranne che consentono di specificare più condizioni (proprietà o attacchi rispettivamente) e diventano effettive solo quando tutte le condizioni sono soddisfatte.

<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> 
Problemi correlati