Wie man einen visuellen Zustand eines Control zu ändern, ohne ihn zu ersetzen?
-
11-09-2019 - |
Frage
Ich mag ein ToggleButton
definieren, die mit rotem Vordergrund (zum Beispiel) erscheint, wenn geprüft, anstatt die Standarddarstellung einer gedrückten Taste.
Ich sehe, dass die visuellen Zustände als benannte Elemente innerhalb des ToggleButton
des ControlTemplate
gehalten werden.
Was ist der einfachste Weg zu ersetzen / entfernen / anpassen einen visuellen Zustand, ohne die gesamte Vorlage neu zu definieren?
Lösung
Ich weiß, das ist sehr spät, aber ich lief nur in das gleiche Problem und dachte, die Lösung selbst heraus, so hoffentlich wird dies für jemanden nützlich sein.
Nach der Vorlage auf ein Steuerelement angewendet wurde (nach der ersten Maßnahme / Anzeigezyklus), können Sie die instanziiert Vorlage zugreifen und seine untergeordneten Komponenten einfach durch VisualTreeHelper.GetChild (myToggleButton, 0)
mit - das wird wieder das Root-Objekt der visuellen Struktur der instanziierten Vorlage, aus dem Sie hinzufügen / entfernen / ändern, um die untergeordneten Objekten in ihrer Kinder-Sammlung.
Offensichtlich sind Sie nur den visuellen Zustand zu ändern , die Instanz der Kontrolle, nicht die Vorlage Ressource selbst, so neue Steuerelemente aus derselben Vorlage erstellt wird noch das ursprüngliche Erscheinungsbild hat.
Meine realted Frage zu diesem Thema finden Sie hier: Wie ersetze ich einen Control Teil zur Laufzeit, in Silverlight 3
Andere Tipps
Haben Sie versucht, Ihre eigenen ControlTemplate
erstellen und stellen Sie den BasedOn
Parameter auf Standard und dann nur geändert, was Sie brauchen?