Erstellen und Verwenden von anwendungsweiten Ressourcen
Das Definieren von Ressourcen und Formatvorlagen auf einer XAML-Seite (Extensible Application Markup Language) ist eine hervorragende Möglichkeit, Codewiederholungen zu reduzieren. Allerdings gibt es ein Problem. Diese Ressourcen und Stile sind nur auf dieser bestimmten XAML-Seite verfügbar. Ressourcenverzeichnisse auf Seitenebene sind nicht ausreichend, um Codewiederholungen in einer Anwendung zu vermeiden, wenn Sie über mehrere Seiten verfügen. In dieser Lerneinheit erfahren Sie, wie Sie Ressourcen und Formatvorlagen für alle Seiten in Ihrer .NET MAUI-App (.NET Multi-Platform App UI) verwenden.
Wo sind Ressourcenverzeichnisse verfügbar?
Die VisualElement-Klasse definiert die Resources-Eigenschaft . Steuerelemente, Seiten und Layouts erben von VisualElement, sodass sie alle über eine Resources-Eigenschaft verfügen, die ein Ressourcenwörterbuch enthalten kann.
Die Application-Klasse definiert auch eine Resources-Eigenschaft . Die Anwendung erbt nicht von VisualElement, daher wird die Eigenschaft als Teil dieser Klasse definiert.
Die folgende Abbildung zeigt die Struktur einer typischen Anwendung. Jedes der angezeigten Elemente verfügt über eine Resources-Eigenschaft , die ein Ressourcenwörterbuch enthalten kann.
Hinweis
Dieses Diagramm zeigt eine stark vereinfachte Darstellung der Organisation der Elemente in einer Anwendung. In diesem Diagramm bezieht sich der Begriff Ansicht auf ein Singleton-Steuerelement wie Schaltfläche oder Bezeichnung, das nicht als Container für untergeordnete Steuerelemente fungiert. Außerdem impliziert der Begriff Layout einen Container, der für das Organisieren des Layouts seiner untergeordneten Steuerelemente verantwortlich ist. Ein Layout kann geschachtelt werden. Beispielsweise könnte ein Grid-Steuerelement innerhalb eines StackLayout-Steuerelements gehalten werden.
Definieren von Ressourcen und Stilen auf Anwendungsebene
Sie definieren Ressourcen und Formatvorlagen auf Anwendungsebene in der XAML-Datei, die Ihrer Application-Klasse zugeordnet ist. Der folgende Code zeigt, wie eine Color-Ressource im Anwendungsressourcenwörterbuch deklariert wird.
<Application.Resources>
<Color x:Key="MyTextColor">Blue</Color>
</Application.Resources>
So findet .NET MAUI Ressourcen oder Stile
Angenommen, Sie wenden wie im folgenden Code gezeigt eine Ressource auf eines Ihrer Steuerelemente an.
<Label TextColor="{StaticResource MyTextColor}" ... />
.NET MAUI muss die Definition dieser Ressource suchen, um den Wert anwenden zu können. Eine Anwendung kann viele Verzeichnisse umfassen. Welche Verzeichnisse werden von .NET MAUI durchsucht und in welcher Reihenfolge? Um diese Fragen zu beantworten, können Sie sich die VisualElement-Instanzen auf Seiten als baumartige Struktur vorstellen. Die Anwendung befindet sich an der Wurzel, unter der sich Seiten, Layouts und Ansichten ausbreiten. Diese Struktur wird häufig als visuelle Struktur bezeichnet. Jedes Element in der Struktur kann über ein eigenes Verzeichnis mit vielen Ressourcen verfügen. Der Stilsuchalgorithmus in .NET MAUI durchläuft die visuelle Struktur nach oben:
Beginnen Sie die Suche mit dem Wörterbuch in der VisualElement-Instanz , auf die die Ressource angewendet wird. Im vorherigen Beispiel beginnt die Suche mit dem Label-Typ. Falls es kein Ressourcenverzeichnis gibt oder ein Verzeichnis vorhanden ist, die Ressource jedoch nicht existiert, wird Suche beim nächsten Element fortgesetzt.
Die Suche wechselt zum übergeordneten Element des Steuerelements und wird wiederholt. In der Regel ist die nächste Stelle, an der gesucht wird, ein Layout.
Das übergeordnete Element des Layouts wird überprüft. Normalerweise wird als nächstes die Seite durchsucht. Wenn ein Layout in einem anderen Layout geschachtelt ist (z. B. ein Raster in einem StackLayout), verlagert sich die Suche im Baum nach oben zum übergeordneten Layout.
Suchen Sie im Wörterbuch nach der Application-Klasse .
Die Suche gibt das erste Element zurück, das mit einem übereinstimmenden x:Key-Wert gefunden wurde. Die folgende Abbildung fasst die Ressourcensuchsequenz zusammen.
In der Praxis ignorieren die meisten Entwickler die Eigenschaft "Resources " in Ansichten und Layouts. Sie verwenden die Verzeichnisse auf Seitenebene für Elemente, die sie auf einer einzelnen Seite verwenden. Ressourcen und Stile, die sie auf mehreren Seiten gemeinsam nutzen möchten, werden auf Anwendungsebene definiert. Der Suchprozess muss dann nur zwei Verzeichnisse überprüfen: das Verzeichnis in der aktuellen Seiteninstanz und das Verzeichnis in der Anwendung.
Hinweis
Wenn keine Ressource mit dem angegebenen Schlüssel gefunden wird, verwendet die App Standardwerte für die Formatierung.
Doppelte Schlüssel
Jede ResourceDictionary-Instanz ist unabhängig, was bedeutet, dass derselbe x:Key-Wert in mehreren Wörterbuchen verwendet werden kann. Wenn derselbe x:Key-Bezeichner in mehreren Wörterbüchern im Suchpfad vorhanden ist, tritt kein Fehler auf. Die Ressource, die dem ersten übereinstimmenden x:Key-Wert auf dem Pfad zugeordnet ist, ist die verwendete Ressource.
Angenommen, Sie haben die folgende Ressource in Ihrer Application-Klasse definiert:
<Application.Resources>
<x:String x:Key="msg">Two</x:String>
</Application.Resources>
Anschließend definieren Sie die folgende Ressource in einer ContentPage und wenden sie auf eine Bezeichnung auf derselben Seite an:
<ContentPage.Resources>
<x:String x:Key="msg">One</x:String>
</ContentPage.Resources>
...
<Label Text="{StaticResource msg}">
Da der erste übereinstimmende x:Key-Wert verwendet wird, wird die Text-Eigenschaft auf "One" festgelegt.