Wir verwenden globale Stildefinitionen für die meisten Typen. Wir definieren dann in der app.xaml Datei. Bei der Verwendung von TextBlock ist es ein Problem, eine Vordergrundfarbe zu definieren, da alle Steuerelemente mit TextBlock (z. B. die Inhaltsfarbe der Schaltfläche) geändert werden. Wie können wir einen globalen Stil definieren, der nur auf bestimmte TextBlock-Verwendungen wirkt?
aktuelle problematische Verwendung:
%Vor% Da ich nicht glaube, dass es eine Möglichkeit gibt, "Ihre" TextBlock
s und diejenigen, die Teil anderer Steuerelemente sind, zu unterscheiden, sind Ihre Möglichkeiten ziemlich begrenzt.
Style
erstellen und Style="{StaticResource coloredTextBlock}"
oder Foreground="{StaticResource textBlockColor}"
allen TextBlock
s hinzufügen. Das wäre ziemlich langweilig und nicht trocken. TextBlock
erbt und diesen formatiert. Dies hat einige der Nachteile der obigen Lösung (Sie müssen daran denken). Aber es hat viel weniger Wiederholungen. Dies liegt daran, dass ContentPresenter
einen TextBlock für einen String-Inhalt erstellt und da dieser TextBlock nicht in der visuellen Struktur ist, sucht er nach der Ressource auf Anwendungsebene. Und wenn Sie auf Anwendungsebene einen Stil für TextBlock definieren, wird dieser auf diesen TextBlock in ControlControls angewendet.
Eine Problemumgehung besteht darin, ein DataTemplate
für System.String
zu definieren, wobei wir explizit einen Standard-TextBlock verwenden können, um den Inhalt anzuzeigen. Sie können das DataTemplate im selben Wörterbuch wie den TextBlock-Stil platzieren, so dass dieses DataTemplate auf den von Ihrem Stil beeinflussten ContentPresenter angewendet wird.
Fügen Sie dies Ihren Anwendungsressourcen hinzu und es sollte für Sie funktionieren -
%Vor%Deklarieren Sie einen Namespace in Ihrem XAML, falls nicht bereits verwiesen -
%Vor%BEARBEITEN: Überprüfen Sie dieses Beispiel, wo es funktioniert ..
%Vor%