Wie kann ich mehrere Bedingungen für den Datenauslöser in WPF bereitstellen?
wpf
datatrigger
Sumeru Suresh
quelle
quelle
@jasonk - Wenn Sie "oder" haben möchten, negieren Sie alle Bedingungen seit (A und B) <=> ~ (~ A oder ~ B)
Wenn Sie jedoch andere Werte als Boolesche Werte haben, verwenden Sie Typkonverter:
Sie können die Werte in der Convert-Methode beliebig verwenden, um eine Bedingung zu erstellen, die zu Ihnen passt.
quelle
conditionConverter
? Wie geben wiror
in diesem Beispiel "Portland" und "OR" als unsere beiden Optionen an?Um die Antwort von @ serine zu erläutern und die Arbeit mit einer nicht trivialen mehrwertigen Bedingung zu veranschaulichen: Ich musste ein "Dim-Out" -Overlay für ein Element für die boolesche Bedingung anzeigen
NOT a AND (b OR NOT c)
.Um diese Logik zu implementieren, habe ich einen generischen
IMultiValueConverter
Namen (umständlich) erstellt, der meiner Logik entsprichtIn der XAML verwende ich dies in einer
MultiDataTrigger
in einer<Style><Style.Triggers>
RessourceDer Vollständigkeit halber ist mein Konverter in a definiert
ResourceDictionary
quelle
DIESE ANTWORT IST NUR FÜR ANIMATIONEN
Wenn Sie die AND-Logik implementieren möchten, sollten Sie MultiTrigger verwenden. Hier ein Beispiel:
Angenommen, wir möchten einige Aktionen ausführen, wenn die Eigenschaft Text = "" (leere Zeichenfolge) AND IsKeyboardFocused = "False" ist Ihr Code sollte wie folgt aussehen:
Wenn Sie die ODER-Logik implementieren möchten, gibt es mehrere Möglichkeiten, und dies hängt davon ab, was Sie versuchen:
Die erste Option besteht darin, mehrere Trigger zu verwenden.
Angenommen, Sie möchten etwas tun, wenn entweder Text = "" ODER IsKeyboardFocused = "False",
dann sollte Ihr Code ungefähr so aussehen:
Aber das Problem dabei ist , was ich tun , wenn ich etwas tun möchte , wenn entweder Text nicht null OR IsKeyboard = „True“? Dies kann durch den zweiten Ansatz erreicht werden:
Erinnern Sie sich an die Regel von De Morgan, die besagt! (! X &&! Y) = x || y.
Wir werden es also verwenden, um das vorherige Problem zu lösen, indem wir einen Multi-Trigger schreiben, der ausgelöst wird, wenn Text = "" und IsKeyboard = "True", und wir werden unsere Aktionen in EXIT ACTIONS wie folgt ausführen :
quelle