Verwenden und Aktualisieren von dynamischen Ressourcen
In der vorherigen Lerneinheit haben Sie eine Ressource in XAML definiert und als statischen Wert verwendet. Es gibt jedoch einige Fälle, in denen StaticResource nicht geeignet ist. Betrachten Sie die folgenden Szenarien:
Angenommen, Sie sollen Farbdesigns implementieren, mit denen der Benutzer das Aussehen der App zur Laufzeit ändern kann. Die StaticResource-Markuperweiterung führt die Verzeichnissuche nur einmal durch, sodass die Benutzeroberfläche nicht dynamisch aktualisiert werden kann.
Sie speichern Benutzereinstellungen auf einem Webserver und laden sie, wenn die Anwendung startet. Die StaticResource-Markuperweiterung löst eine Ausnahme aus, wenn der Schlüssel nicht im Verzeichnis gefunden wird.
In dieser Lerneinheit wird gezeigt, wie Sie solche Probleme mithilfe von dynamischen Ressourcen behandeln.
Aktualisieren von Ressourcen zur Laufzeit
Sie speichern Ressourcen in einem Ressourcenverzeichnis. Sie können Code schreiben, um diese Ressourcen zur Laufzeit zu aktualisieren. Sie können sogar neue Ressourcen hinzufügen oder vorhandene Ressourcen entfernen.
Betrachten Sie das folgenden Beispiel:
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
Angenommen, Sie möchten den Wert der PanelBackgroundColor-Ressource ändern, während die Anwendung ausgeführt wird. Sie können Code in die CodeBehind-Datei der Seite einfügen, um auf die Eigenschaft Ressourcen zuzugreifen. Im folgenden Beispiel wird der Ressourcenwert aus dem vorherigen XAML-Beispiel in eine andere Farbe aktualisiert.
this.Resources["PanelBackgroundColor"] = Colors.Green;
Was bedeutet DynamicResource?
DynamicResource ist eine weitere Markuperweiterung für die Suche von Ressourcen in einem Ressourcenverzeichnis. Ähnlich wie bei StaticResource wird eine Verzeichnissuche durchgeführt, wenn das Zielobjekt erstellt wird. DynamicResource lauscht aber auch auf Änderungen an der Ressource im Verzeichnis. Wenn sich der Wert der Ressource im Verzeichnis ändert, aktualisiert DynamicResource automatisch die Benutzeroberfläche.
DynamicResource hat einen Vorteil gegenüber StaticResource. Wenn DynamicResource den Schlüssel im Schlüsselverzeichnis nicht findet, wird die Eigenschaft nicht festgelegt. Im Gegensatz zu StaticResource ist ein fehlender Schlüssel kein Fehler, sodass keine Ausnahme ausgelöst wird.
Hinweis
Die Eigenschaften der DynamicResource-Markuperweiterung bedingen jedoch eine geringfügige Leistungseinbuße für Ihre Anwendung. Obwohl Sie DynamicResource anstelle von StaticResource in Ihren XAML-Seiten verwenden können, sollten Sie mit der StaticResource-Markuperweiterung darauf verweisen, wenn sich eine Ressource nicht ändert.
Um die aktualisierte Hintergrundfarbe aus dem vorherigen Beispiel zu verwenden, können Sie DynamicResource in Ihrem XAML-Code wie folgt anwenden:
<ContentPage ...>
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
<StackLayout BackgroundColor="{DynamicResource PanelBackgroundColor}">
...
</StackLayout>
</ContentPage>
Wenn sich der Wert der Ressource PanelBackgroundColor ändert, wird der Wert BackgroundColor des StackLayout-Steuerelements automatisch aktualisiert.