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