Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Presentation Foundation (WPF)-Ressourcen unterstützen ein Feature für zusammengeführte Ressourcenwörterbücher. Dieses Feature bietet eine Möglichkeit, den Ressourcenteil einer WPF-Anwendung außerhalb der kompilierten XAML-Anwendung zu definieren. Ressourcen können dann für alle Anwendungen freigegeben werden und sind auch bequemer für die Lokalisierung isoliert.
Erstellen eines zusammengeführten Wörterbuchs
Im Markup verwenden Sie die folgende Syntax, um ein zusammengeführtes Ressourcenwörterbuch in eine Seite einzuführen:
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myresourcedictionary.xaml"/>
<ResourceDictionary Source="myresourcedictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
Das ResourceDictionary Element verfügt nicht über eine x:Key-Direktive, die in der Regel für alle Elemente in einer Ressourcenauflistung erforderlich ist. Ein weiterer ResourceDictionary
Verweis innerhalb der MergedDictionaries Auflistung ist jedoch ein Sonderfall, der für dieses Szenario für zusammengeführte Ressourcenwörterbücher reserviert ist. Darüber hinaus darf das ResourceDictionary
, das ein zusammengeführtes Ressourcenwörterbuch einführt, keine x:Key-Direktive haben.
In der Regel gibt jede ResourceDictionary innerhalb der MergedDictionaries Auflistung ein Source Attribut an. Der Wert Source
sollte ein einheitlicher Bezeichner (URI) sein, der auf den Speicherort der zusammengeführten Ressourcendatei verweist. Das Ziel dieses URI muss eine andere XAML-Datei mit ResourceDictionary
dem Stammelement sein.
Hinweis
Es ist zulässig, Ressourcen innerhalb eines als zusammengeführtes Wörterbuch definierten ResourceDictionary zu definieren, entweder als Alternative zur Angabe von Source, oder zusätzlich zu den Ressourcen, die aus der angegebenen Quelle enthalten sind. Dies ist jedoch kein gängiges Szenario. Das Hauptszenario für zusammengeführte Wörterbücher besteht darin, Ressourcen von externen Dateispeicherorten zusammenzuführen. Wenn Sie Ressourcen innerhalb des Markups für eine Seite angeben möchten, definieren Sie diese im Haupt- ResourceDictionary
und nicht in den zusammengeführten Wörterbüchern.
Verhalten des kombinierten Wörterbuchs
Ressourcen in einem zusammengeführten Wörterbuch belegen einen Speicherort im Ressourcensuchbereich, der unmittelbar nach dem Bereich des Hauptressourcenwörterbuchs liegt, in das sie zusammengeführt wurden. Obwohl ein Ressourcenschlüssel innerhalb eines einzelnen Wörterbuchs eindeutig sein muss, kann ein Schlüssel in einer Reihe zusammengeführter Wörterbücher mehrmals vorhanden sein. In diesem Fall stammt die zurückgegebene Ressource aus dem letzten Wörterbuch, das sequenziell in der MergedDictionaries Auflistung gefunden wurde. Wenn die MergedDictionaries Auflistung in XAML definiert wurde, ist die Reihenfolge der zusammengeführten Wörterbücher in der Auflistung die Reihenfolge der Elemente, wie im Markup angegeben. Wenn ein Schlüssel im primären Wörterbuch und auch in einem zusammengeführten Wörterbuch definiert ist, stammt die zurückgegebene Ressource aus dem primären Wörterbuch. Diese Bereichsregeln gelten gleichermaßen für statische Ressourcenverweise und dynamische Ressourcenverweise.
Zusammengeführte Wörterbücher und Code
Zusammengeführte Wörterbücher können durch Code einem Resources
Wörterbuch hinzugefügt werden. Der standardmäßige, anfänglich leere ResourceDictionary, der für jede Resources
-Eigenschaft vorhanden ist, verfügt auch über eine standardmäßige, anfänglich leere MergedDictionaries-Auflistungseigenschaft. Wenn Sie ein zusammengeführtes Wörterbuch über Code hinzufügen möchten, erhalten Sie einen Verweis auf das gewünschte primäre ResourceDictionary
, rufen den Eigenschaftswert von MergedDictionaries
ab und rufen Add
das generische Collection
auf, das in MergedDictionaries
enthalten ist. Das objekt, das Sie hinzufügen, muss ein neues ResourceDictionary
sein.
Im Code legen Sie die Source Eigenschaft nicht fest. Stattdessen müssen Sie ein Objekt abrufen, indem Sie entweder ein ResourceDictionary
Objekt erstellen oder ein Objekt laden. Eine Möglichkeit, ein vorhandenes ResourceDictionary
zu laden, besteht darin, XamlReader.Load auf einen bestehenden XAML-Dateidatenstrom mit einem ResourceDictionary
-Root aufzurufen und dann den Rückgabewert in ResourceDictionary
umzuwandeln.
Zusammengeführte Wörterbuch-URIs
Es gibt mehrere Techniken zum Einschließen eines zusammengeführten Ressourcenwörterbuchs, die durch das von Ihnen verwendete URI-Format (Uniform Resource Identifier) angegeben werden. Im Allgemeinen können diese Techniken in zwei Kategorien unterteilt werden: Ressourcen, die als Teil des Projekts kompiliert werden, und Ressourcen, die nicht als Teil des Projekts kompiliert werden.
Für Ressourcen, die als Teil des Projekts kompiliert werden, können Sie einen relativen Pfad verwenden, der sich auf den Ressourcenspeicherort bezieht. Der relative Pfad wird während der Kompilierung ausgewertet. Ihre Ressource muss als Teil des Projekts als Ressourcen-Build-Aktion definiert werden. Wenn Sie eine XAML-Ressourcendatei in das Projekt als Ressource einschließen, müssen Sie die Ressourcendatei nicht in das Ausgabeverzeichnis kopieren, die Ressource ist bereits in der kompilierten Anwendung enthalten. Sie können auch die Build-Aktion "Inhalt" verwenden, müssen dann jedoch die Dateien in das Ausgabeverzeichnis kopieren und die Ressourcendateien im selben Pfadverhältnis zur ausführbaren Datei bereitstellen.
Hinweis
Verwenden Sie nicht die Buildaktion Eingebettete Ressource. Die Buildaktion selbst wird für WPF-Anwendungen unterstützt, aber die Auflösung von Source umfasst ResourceManager nicht vollständig und kann daher die einzelne Ressource nicht aus dem Datenstrom trennen. Sie können eingebettete Ressource weiterhin für andere Zwecke verwenden, solange Sie auch für den Zugriff auf die Ressourcen verwendet haben ResourceManager .
Eine verwandte Technik besteht darin, einen Pack-URI für eine XAML-Datei zu verwenden und als Quelle zu bezeichnen. Pack-URI ermöglicht Verweise auf Komponenten von referenzierten Assemblys und anderen Techniken. Weitere Informationen zu Pack-URIs finden Sie unter WPF Application Resource, Content und Data Files.
Bei Ressourcen, die nicht als Teil des Projekts kompiliert werden, wird der URI zur Laufzeit ausgewertet. Sie können einen allgemeinen URI-Transport wie Datei: oder HTTP verwenden, um auf die Ressourcendatei zu verweisen. Der Nachteil der Verwendung des nicht kompilierten Ressourcenansatzes besteht darin, dass file: Zugriff zusätzliche Bereitstellungsschritte erfordert und http: Zugriff die Internetsicherheitszone impliziert.
Wiederverwenden zusammengeführter Wörterbücher
Sie können zusammengeführte Ressourcenwörterbücher zwischen Anwendungen wiederverwenden oder freigeben, da das zusammenzuführende Ressourcenverzeichnis über einen gültigen URI (Uniform Resource Identifier) referenziert werden kann. Genau wie Sie dies tun, hängt von Ihrer Anwendungsbereitstellungsstrategie und dem von Ihnen verfolgten Anwendungsmodell ab. Die zuvor erwähnte Pack-URI-Strategie bietet eine Möglichkeit, eine zusammengeführte Ressource über mehrere Projekte während der Entwicklung zu beziehen, indem ein Assemblyverweis geteilt wird. In diesem Szenario werden die Ressourcen weiterhin vom Client verteilt, und mindestens eine der Anwendungen muss die referenzierte Assembly bereitstellen. Es ist auch möglich, zusammengeführte Ressourcen über einen verteilten URI zu referenzieren, der das http:- Protokoll verwendet.
Das Schreiben von zusammengeführten Wörterbüchern als lokale Anwendungsdateien oder in lokalem freigegebenem Speicher ist ein weiteres mögliches Szenario für zusammengeführte Wörterbücher und Anwendungsbereitstellungen.
Lokalisierung
Wenn Ressourcen, die lokalisiert werden müssen, auf Wörterbücher beschränkt sind, die in Hauptwörterbücher zusammengeführt und als lose XAML-Dateien behalten werden, können diese Dateien separat lokalisiert werden. Diese Technik ist eine einfache Alternative zur Lokalisierung der Satellitenressourcen-Assemblies. Ausführliche Informationen finden Sie unter WPF Globalization and Localization Overview.
Siehe auch
.NET Desktop feedback