Share via


Zusammengeführte Ressourcenwörterbücher

Aktualisiert: November 2007

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. Die Ressourcen können dann anwendungsübergreifend freigegeben und auch bequemer für die Lokalisierung isoliert werden.

Einführung in ein zusammengeführtes Ressourcenwörterbuch

In 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>

Beachten Sie, dass das ResourceDictionary-Element kein x:Key-Attribut aufweist, das in der Regel für alle Elemente in einer Ressourcenauflistung erforderlich ist. Bei einem weiteren ResourceDictionary-Verweis innerhalb der MergedDictionaries-Auflistung handelt es sich um einen Sonderfall, der für dieses Szenario mit zusammengeführten Ressourcenwörterbüchern reserviert ist. Das ResourceDictionary, das ein zusammengeführtes Ressourcenwörterbuch einführt, kann kein x:Key-Attribut aufweisen. In der Regel gibt jedes ResourceDictionary innerhalb der MergedDictionaries-Auflistung ein Source-Attribut an. Der Wert von Source sollte ein Uniform Resource Identifier (URI) sein, der den Speicherort der zusammenzuführenden Ressourcendatei auflöst. Das Ziel von diesem URI muss eine andere XAML-Datei sein, mit ResourceDictionary als Stammelement.

Tipp

Es ist zulässig, Ressourcen in einem ResourceDictionary zu definieren, das als zusammengeführtes Wörterbuch angegeben ist, und zwar entweder als Alternative zur Angabe von Source oder zusätzlich zu sonstigen Ressourcen, die aus der angegebenen Quelle eingeschlossen sind. Es handelt sich jedoch nicht um ein typisches Szenario. Das Hauptszenario für zusammengeführte Wörterbücher besteht in der Zusammenführung von Ressourcen aus externen Dateispeicherorten. Wenn Sie innerhalb des Markups Ressourcen für eine Seite angeben möchten, sollten Sie diese typischerweise im Haupt-ResourceDictionary und nicht in den zusammengeführten Wörterbüchern definieren.

Verhalten von zusammengeführten Wörterbüchern

Ressourcen in einem zusammengeführten Wörterbuch belegen einen Speicherort im Ressourcensuchbereich, der sich direkt hinter dem Bereich des Hauptressourcenwörterbuchs befindet, in dem sie zusammengeführt werden. Obwohl ein Ressourcenschlüssel in einem einzelnen Wörterbuch eindeutig sein muss, kann ein Schlüssel mehrere Male in einem Satz von zusammengeführten Wörterbüchern vorhanden sein. In diesem Fall stammt die zurückgegebene Ressource aus dem letzten Wörterbuch in der Reihenfolge in der MergedDictionaries-Auflistung. Wenn die MergedDictionaries-Auflistung in XAML definiert wurde, entspricht die Reihenfolge der zusammengeführten Wörterbücher in der Auflistung der Reihenfolge der im Markup bereitgestellten Elemente. 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 und dynamische Ressourcenverweise.

Zusammengeführte Wörterbücher und Code

Einem Resources-Wörterbuch können zusammengeführte Wörterbücher durch Code hinzugefügt werden. Das standardmäßige und anfangs leere ResourceDictionary, das für jede Resources-Eigenschaft vorhanden ist, verfügt auch über eine standardmäßige und anfangs leere MergedDictionaries-Auflistungseigenschaft. Um ein zusammengeführtes Wörterbuch über Code hinzuzufügen, fragen Sie einen Verweis auf das gewünschte primäre ResourceDictionary ab, rufen seinen MergedDictionaries-Eigenschaftenwert ab und rufen dann Add für die generische Collection auf, die 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 ResourceDictionary-Objekt abrufen, indem Sie entweder eins erstellen oder laden. Sie können ein vorhandenes ResourceDictionary laden, indem Sie XamlReader.Load für einen vorhandenen XAML-Dateistream aufrufen, der einen ResourceDictionary-Stamm aufweist, und dann den XamlReader.Load-Rückgabewert in ResourceDictionary umwandeln.

URIs für zusammengeführte Ressourcenwörterbücher

Um ein zusammengeführtes Ressourcenwörterbuch einzuschließen, stehen mehrere Techniken zur Verfügung, die durch das verwendete Uniform Resource Identifier (URI)-Format angegeben werden. Diese Techniken lassen sich in zwei Kategorien einteilen: Ressourcen, die als Teil des Projekts kompiliert werden, und Ressourcen, die nicht als Teil des Projekts kompiliert werden.

Bei Ressourcen, die als Teil des Projekts kompiliert werden, können Sie den relativen Pfad verwenden, der auf den Speicherort der Ressource verweist. Der relative Pfad wird während der Kompilierung ausgewertet. Die Ressource muss als Teil des Projekts als Ressourcenbuildvorgang definiert werden. Wenn Sie eine Ressourcen-XAML-Datei im 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 den Inhaltsbuildvorgang verwenden. Dann müssen Sie jedoch die Dateien in das Ausgabeverzeichnis kopieren und die Ressourcendateien außerdem in derselben Pfadbeziehung für die ausführbare Datei bereitstellen.

Tipp

Verwenden Sie nicht den Eingebettete-Ressource-Buildvorgang. Der Buildvorgang selbst wird für WPF-Anwendungen unterstützt. Die Auflösung von Source umfasst jedoch keinen ResourceManager und kann daher keine einzelnen Ressourcen im Stream isolieren. Sie können die eingebetteten Ressourcen weiterhin zu anderen Zwecken verwenden, sofern Sie auch ResourceManager für den Zugriff auf die Ressourcen verwendet haben.

In einer ähnlichen Technik wird ein Paket-URI für eine XAML-Datei verwendet, auf die als Quelle verwiesen wird. Ein Paket-URI aktiviert Verweise auf Komponenten von Assemblys, auf die verwiesen wird, und anderen Techniken. Weitere Informationen über Paket-URIs finden Sie unter Windows Presentation Foundation-Anwendungsressource, Inhalts- und Datendateien.

Bei Ressourcen, die nicht als Teil des Projekts kompiliert werden, kann der URI zur Laufzeit ausgewertet werden. Sie können einen allgemeinen URI-Transport wie file: oder http: verwenden, um auf die Ressourcendatei zu verweisen. Der Nachteil beim Ansatz mit nicht kompilierten Ressourcen besteht darin, dass für file: zusätzliche Bereitstellungsschritte erforderlich werden und der http:-Zugriff die Internetsicherheitszone voraussetzt.

Wiederverwendung von zusammengeführten Wörterbüchern

Zusammengeführte Wörterbücher können wieder verwendet oder für mehrere Anwendungen freigegeben werden, da durch jeden gültigen Uniform Resource Identifier (URI) auf das zusammenzuführende Ressourcenwörterbuch verwiesen werden kann. Der genaue Ablauf dieses Vorgangs hängt von der Bereitstellungsstrategie für Ihre Anwendung und dem verwendeten Anwendungsmodell ab. Die bereits erwähnte Paket-URI-Strategie bietet eine Möglichkeit, eine zusammengeführte Ressource für viele Projekte während der Entwicklung durch die Freigabe eines Assemblyverweises als häufige Quelle zu verwenden. In diesem Szenario werden die Ressourcen weiterhin durch den Client verteilt, und mindestens eine der Anwendungen muss die Assembly bereitstellen, auf die verwiesen wird. Es ist auch möglich, durch einen verteilten URI, der das HTTP-Protokoll verwendet, auf zusammengeführte Ressourcen zu verweisen.

Das Schreiben zusammengeführter Wörterbücher als lokale Anwendungsdateien stellt ein weiteres mögliches Szenario für zusammengeführte Wörterbücher/Anwendungsbereitstellung dar.

Lokalisierung

Wenn Ressourcen, die lokalisiert werden müssen, in Wörterbüchern isoliert werden, die in den primären Wörterbüchern zusammengeführt und als lose XAML beibehalten werden, ist eine separate Lokalisierung dieser Dateien möglich. Diese Technik stellt eine einfache Alternative zur Lokalisierung der Satellitenressourcenassemblys dar. Weitere Informationen finden Sie unter Übersicht über WPF-Globalisierung und -Lokalisierung.

Siehe auch

Konzepte

Übersicht über Ressourcen

Ressourcen und Code

Windows Presentation Foundation-Anwendungsressource, Inhalts- und Datendateien

Referenz

ResourceDictionary