Trigger

De Banane Atomic
Version datée du 31 mars 2017 à 22:43 par Nicolas (discussion | contributions) (→‎EventTrigger)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Définition

Déclencheur d'actions en fonctions d’événements (souris ou clavier) ou de modifications de valeurs (propriétés ou data binding).

Propriété Trigger

La propriété Trigger fonctionne avec les propriétés des composants graphiques.

Xaml.svg
<Window.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <!-- Déclenchement du Trigger sur la propriété IsMouseOver de la TextBox -->
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Cyan" />
            </Trigger> ...

DataTrigger

DataTrigger fonctionne avec les propriétés de l'objet référencé par le Binding.

Xaml.svg
<TextBlock Foreground="Black">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
             <!-- Le trigger ne peut pas redéfinir les propriétés définies dans
             le control (ex : Foreground), pour faire cela, il faut plutôt
             définir les proprétés dans le Style -->
            <Setter Property="Background" Value="White"/>
            <Style.Triggers>
                <!-- Le trigger est déclenché lorsque Propriété passe à True -->
                <DataTrigger Binding="{Binding Path=Propriété}" Value="True">
                    <!-- Lorsque le trigger est déclenché, la propriété
                    Background est mise à Red. Lorsque Propriété passe à False,
                    Background reprend sa valeur initiale (White) -->
                    <Setter Property="Background" Value="Red"/>
                </DataTrigger> ...

MultiDataTrigger

Comme pour le DataTrigger mais avec plusieurs conditions de déclenchement.

Xaml.svg
<TextBox Text="TTT">
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Background" Value="Green" />
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <!-- Ce Binding fait référence à la TextBox elle-même. Equivalent à la Propriété Trigger -->
                        <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}"
                                          Value="True"/>
                        <!-- Ce Binding fait référence à la propriété ChangeColor du DataContext -->
                        <Condition Binding="{Binding Path=ChangeColor}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Background" Value="Orange" />
                </MultiDataTrigger> ...

EventTrigger

L'EventTrigger est utilisé pour déclencher une animation suite à un événement.

Xaml.svg
<UserControl>
    <UserControl.Triggers>
        <!-- Déclenchement lors du double-click sur le UserControl -->
        <EventTrigger RoutedEvent="UserControl.MouseDoubleClick">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard/>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>

Pour lier un événement au lancement d'une commande, il vaut mieux utiliser InvokeCommandAction ou EventToCommand.