Comment puis-je fournir plusieurs conditions pour le déclencheur de données dans WPF?
wpf
datatrigger
Sumeru Suresh
la source
la source
@jasonk - si vous voulez avoir "ou" alors annulez toutes les conditions depuis (A et B) <=> ~ (~ A ou ~ B)
mais si vous avez des valeurs autres que booléennes, essayez d'utiliser des convertisseurs de type:
vous pouvez utiliser les valeurs de la méthode Convert comme vous le souhaitez pour produire une condition qui vous convient.
la source
conditionConverter
? Comment spécifions-nous "Portland" et "OU" comme nos deuxor
options dans cet exemple?Pour élaborer sur la réponse de @ serine et illustrer le travail avec une condition multi-valeurs non triviale: j'avais besoin d'afficher une superposition "dim-out" sur un élément pour la condition booléenne
NOT a AND (b OR NOT c)
.Pour implémenter cette logique, j'ai fait un générique
IMultiValueConverter
nommé (maladroitement) pour correspondre à ma logiqueDans le XAML, j'utilise ceci
MultiDataTrigger
dans une<Style><Style.Triggers>
ressourceEt par souci d'exhaustivité, mon convertisseur est défini dans un
ResourceDictionary
la source
CETTE RÉPONSE EST POUR LES ANIMATIONS UNIQUEMENT
Si vous souhaitez implémenter la logique AND, vous devez utiliser MultiTrigger, voici un exemple:
Supposons que nous voulions faire des actions si la propriété Text = "" (chaîne vide) AND IsKeyboardFocused = "False", alors votre code doit ressembler à ceci:
Si vous souhaitez implémenter la logique OR, il existe plusieurs façons, et cela dépend de ce que vous essayez de faire:
La première option consiste à utiliser plusieurs déclencheurs.
Donc, supposons que vous vouliez faire quelque chose si Text = "" OU IsKeyboardFocused = "False",
alors votre code devrait ressembler à ceci:
Mais le problème est que vais-je faire si je veux faire quelque chose si soit Text ISN'T null OU IsKeyboard = "True"? Ceci peut être réalisé par la deuxième approche:
rappelez la règle de De Morgan, qui dit! (! X &&! Y) = x || y.
Nous allons donc l'utiliser pour résoudre le problème précédent, en écrivant un déclencheur multiple qu'il est déclenché lorsque Text = "" et IsKeyboard = "True", et nous ferons nos actions dans EXIT ACTIONS , comme ceci:
la source