Jak mogę podać wiele warunków dla wyzwalacza danych w WPF?
wpf
datatrigger
Sumeru Suresh
źródło
źródło
@jasonk - jeśli chcesz mieć „lub”, zaneguj wszystkie warunki od (A i B) <=> ~ (~ A lub ~ B)
ale jeśli masz wartości inne niż logiczne, spróbuj użyć konwerterów typów:
możesz użyć wartości w metodzie Convert w dowolny sposób, aby stworzyć warunek, który Ci odpowiada.
źródło
conditionConverter
robi? W jaki sposób określamy „Portland” i „OR” jako dwieor
opcje w tym przykładzie?Aby rozwinąć odpowiedź @ serine i zilustrować pracę z nietrywialnym warunkiem wielowartościowym: Musiałem pokazać nakładkę „dim-out” na elemencie dla warunku boolowskiego
NOT a AND (b OR NOT c)
.Aby zaimplementować tę logikę, stworzyłem rodzaj o
IMultiValueConverter
nazwie (niezręcznie), aby pasował do mojej logikiW XAML używam tego w sposób
MultiDataTrigger
w<Style><Style.Triggers>
zasobieZe względu na kompletność mój konwerter jest zdefiniowany w pliku
ResourceDictionary
źródło
TA ODPOWIEDŹ DOTYCZY WYŁĄCZNIE ANIMACJI
Jeśli chcesz zaimplementować logikę AND, powinieneś użyć MultiTrigger, oto przykład:
Załóżmy, że chcemy wykonać jakieś akcje, jeśli właściwość Text = "" (pusty ciąg) AND IsKeyboardFocused = "False", a następnie Twój kod powinien wyglądać następująco:
Jeśli chcesz wdrożyć logikę OR, istnieje kilka sposobów i zależy to od tego, co próbujesz zrobić:
Pierwszą opcją jest użycie wielu wyzwalaczy.
Więc załóżmy, że chcesz coś zrobić, jeśli albo Text = "" LUB IsKeyboardFocused = "False",
wtedy Twój kod powinien wyglądać mniej więcej tak:
Ale problem polega na tym, co mam zrobić, jeśli chcę coś zrobić, jeśli albo tekst NIE JEST null, LUB IsKeyboard = "True"? Można to osiągnąć poprzez drugie podejście:
Przypomnij sobie regułę De Morgana, która mówi! (! X &&! Y) = x || y.
Więc użyjemy go do rozwiązania poprzedniego problemu, pisząc wyzwalacz wielokrotny, który jest wyzwalany, gdy Text = "" i IsKeyboard = "True", a nasze działania wykonamy w EXIT ACTIONS , na przykład:
źródło