Recherche…


Introduction

Discussion sur les différents types de déclencheurs disponibles dans WPF, notamment Trigger , DataTrigger , MultiTrigger , MultiDataTrigger et EventTrigger .

Les déclencheurs permettent à toute classe dérivant de FrameworkElement ou FrameworkContentElement de définir ou de modifier leurs propriétés en fonction de certaines conditions définies dans le déclencheur. Fondamentalement, si un élément peut être stylé, il peut également être déclenché.

Remarques

  • Tous les déclencheurs, à l'exception de EventTrigger doivent être définis dans un élément <Style> . Un EventTrigger peut être défini dans un élément <Style> ou dans la propriété Triggers un contrôle.
  • <Trigger> éléments <Trigger> peuvent contenir un nombre quelconque d’éléments <Setter> . Ces éléments sont responsables de la définition des propriétés de l'élément contenant lorsque la condition de l'élément <Trigger> est remplie.
  • Si une propriété est définie dans le balisage de l'élément racine, la modification de propriété définie dans l'élément <Setter> ne prendra pas effet, même si la condition de déclenchement a été remplie. Considérons le balisage <TextBlock Text="Sample"> . La propriété Text du code de procédure ne changera jamais en fonction d'un déclencheur, car les définitions de la propriété racine prennent le pas sur les propriétés définies dans les styles.
  • Comme les liaisons, une fois qu'un déclencheur a été utilisé, il ne peut plus être modifié.

Déclencheur

Le plus simple des cinq types de déclencheurs, le Trigger est responsable de la définition des propriétés en fonction d'autres propriétés dans le même contrôle .

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <Trigger Property="Text" Value="Pass">
                    <Setter Property="Foreground" Value="Green"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

Dans cet exemple, la couleur de premier plan du TextBlock devient verte lorsque sa propriété Text est égale à la chaîne "Pass" .

MultiTrigger

Un MultiTrigger est similaire à un Trigger standard en ce sens qu'il s'applique uniquement aux propriétés du même contrôle . La différence est qu'un MultiTrigger a plusieurs conditions qui doivent être satisfaites avant que le déclencheur fonctionne. Les conditions sont définies à l'aide de la <Condition> .

<TextBlock x:Name="_txtBlock" IsEnabled="False">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="Text" Value="Pass"/>
                        <Condition Property="IsEnabled" Value="True"/>
                    </MultiTrigger.Conditions>
                    <Setter Property="Foreground" Value="Green"/>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

Notez que le MultiTrigger ne s'active pas tant que les deux conditions ne sont pas remplies.

DataTrigger

Un DataTrigger peut être attaché à n'importe quelle propriété, que ce soit sur son propre contrôle, un autre contrôle ou même une propriété dans une classe non-interface utilisateur. Considérons la classe simple suivante.

public class Cheese
{
    public string Name { get; set; }
    public double Age { get; set; }
    public int StinkLevel { get; set; }
}

Ce que nous allons attacher en tant que DataContext dans le TextBlock suivant.

<TextBlock Text="{Binding Name}">
    <TextBlock.DataContext>
        <local:Cheese Age="12" StinkLevel="100" Name="Limburger"/>
    </TextBlock.DataContext>
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding StinkLevel}" Value="100">
                    <Setter Property="Foreground" Value="Green"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

Dans le code précédent, la propriété TextBlock.Foreground sera verte. Si nous modifions la propriété StinkLevel dans notre XAML à une valeur autre que 100, la propriété Text.Foreground reviendra à sa valeur par défaut.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow