Zusammengeführte RessourcenwörterbücherMerged Resource Dictionaries

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)-Ressourcen unterstützen eine Funktion für zusammengeführte Ressourcenwörterbücher.resources support a merged resource dictionary feature. Diese Funktion bietet die Möglichkeit, den Ressourcenteil einer WPFWPF-Anwendung außerhalb der kompilierten XAMLXAML-Anwendung zu definieren.This feature provides a way to define the resources portion of a WPFWPF application outside of the compiled XAMLXAML application. Die Ressourcen können dann anwendungsübergreifend freigegeben werden und auch bequemer für die Lokalisierung isoliert werden.Resources can then be shared across applications and are also more conveniently isolated for localization.

Einführung in ein zusammengeführtes RessourcenwörterbuchIntroducing a Merged Resource Dictionary

Verwenden Sie in Markup folgende Syntax, um ein zusammengeführtes Ressourcenwörterbuch in eine Seite einzubinden:In markup, you use the following syntax to introduce a merged resource dictionary into a page:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

Beachten Sie, dass die ResourceDictionary -Element verfügt nicht über eine X: Key Directive, die in der Regel für alle Elemente einer ressourcenauflistung erforderlich ist.Note that the ResourceDictionary element does not have an x:Key Directive, which is generally required for all items in a resource collection. Aber eine andere ResourceDictionary in verweisen auf die MergedDictionaries Auflistung ist ein Sonderfall, der für dieses Szenario zusammengeführten Ressourcenwörterbüchern reserviert.But another ResourceDictionary reference within the MergedDictionaries collection is a special case, reserved for this merged resource dictionary scenario. Die ResourceDictionary wird ein zusammengeführtes Ressourcenwörterbuch kein X: Key Directive.The ResourceDictionary that introduces a merged resource dictionary cannot have an x:Key Directive. In der Regel jeder ResourceDictionary innerhalb der MergedDictionaries Sammlung angibt, ein Source Attribut.Typically, each ResourceDictionary within the MergedDictionaries collection specifies a Source attribute. Der Wert des Source muss eine Uniform Resource Identifier (URI)uniform resource identifier (URI) , der auf den Speicherort der zusammenzuführenden Ressourcendatei auflöst.The value of Source should be a Uniform Resource Identifier (URI)uniform resource identifier (URI) that resolves to the location of the resources file to be merged. Das Ziel von diesem URIURI muss eine andere XAMLXAML -Datei mit ResourceDictionary als Stammelement.The destination of that URIURI must be another XAMLXAML file, with ResourceDictionary as its root element.

Hinweis

Es ist zulässig, definieren Sie Ressourcen in einem ResourceDictionary angegebenen als zusammengeführtes Wörterbuch, entweder als eine Alternative zur Angabe Source, oder zusätzlich zu sonstigen Ressourcen, die von der angegebenen Datenquelle enthalten sind.It is legal to define resources within a ResourceDictionary that is specified as a merged dictionary, either as an alternative to specifying Source, or in addition to whatever resources are included from the specified source. Das ist aber kein übliches Szenario. Das Hauptszenario für zusammengeführte Wörterbücher besteht in der Zusammenführung von Ressourcen aus externen Dateispeicherorten.However, this is not a common scenario; the main scenario for merged dictionaries is to merge resources from external file locations. Wenn Sie Ressourcen in das Markup für eine Seite angeben möchten, sollten Sie in der Regel definieren diese auf dem hauptblatt ResourceDictionary und nicht in den zusammengeführten Wörterbüchern.If you want to specify resources within the markup for a page, you should typically define these in the main ResourceDictionary and not in the merged dictionaries.

Verhalten von zusammengeführten WörterbüchernMerged Dictionary Behavior

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.Resources in a merged dictionary occupy a location in the resource lookup scope that is just after the scope of the main resource dictionary they are merged into. Obwohl ein Ressourcenschlüssel in einem einzelnen Wörterbuch eindeutig sein muss, kann ein Schlüssel in einem Satz von zusammengeführten Wörterbüchern mehrmals vorkommen.Although a resource key must be unique within any individual dictionary, a key can exist multiple times in a set of merged dictionaries. In diesem Fall werden die Ressource, die zurückgegeben wird von dem letzten Wörterbuch sequenziell in der MergedDictionaries Auflistung.In this case, the resource that is returned will come from the last dictionary found sequentially in the MergedDictionaries collection. Wenn die MergedDictionaries in die Auflistung definiert wurde XAMLXAML, und klicken Sie dann die Reihenfolge der zusammengeführten Wörterbücher in der Auflistung die Reihenfolge der Elemente, ist wie im Markup angegeben.If the MergedDictionaries collection was defined in XAMLXAML, then the order of the merged dictionaries in the collection is the order of the elements as provided in the markup. Wenn ein Schlüssel sowohl im primären Wörterbuch als auch in einem zusammengeführten Wörterbuch definiert ist, stammt die zurückgegebene Ressource aus dem primären Wörterbuch.If a key is defined in the primary dictionary and also in a dictionary that was merged, then the resource that is returned will come from the primary dictionary. Diese Bereichsregeln gelten gleichermaßen für statische und dynamische Ressourcenverweise.These scoping rules apply equally for both static resource references and dynamic resource references.

Zusammengeführte Wörterbücher und CodeMerged Dictionaries and Code

Einem Resources-Wörterbuch können zusammengeführte Wörterbücher durch Code hinzugefügt werden.Merged dictionaries can be added to a Resources dictionary through code. Die standardmäßige und anfangs leere ResourceDictionary , vorhanden ist, für alle Resources Eigenschaft verfügt auch über eine standardmäßige und anfangs leere MergedDictionaries Auflistungseigenschaft.The default, initially empty ResourceDictionary that exists for any Resources property also has a default, initially empty MergedDictionaries collection property. Um ein zusammengeführtes Wörterbuch über Code hinzuzufügen, erhalten Sie einen Verweis auf das gewünschte primäre ResourceDictionary, erhalten die MergedDictionaries -Eigenschaftswert, und rufen Add für den generischen Collection in enthaltenen MergedDictionaries.To add a merged dictionary through code, you obtain a reference to the desired primary ResourceDictionary, get its MergedDictionaries property value, and call Add on the generic Collection that is contained in MergedDictionaries. Das Objekt, das Sie hinzufügen, muss ein neues ResourceDictionary.The object you add must be a new ResourceDictionary. Im Code Sie nicht Festlegen der Source Eigenschaft.In code, you do not set the Source property. Stattdessen benötigen Sie eine ResourceDictionary Objekt, indem entweder erstellen oder laden.Instead, you must obtain a ResourceDictionary object by either creating one or loading one. Eine Möglichkeit zum Laden einer vorhandenen ResourceDictionary Aufrufen XamlReader.Load auf einem vorhandenen XAMLXAML Dateistream, die eine ResourceDictionary Stamm, klicken Sie dann die Umwandlung der XamlReader.Load Rückgabewert auf ResourceDictionary.One way to load an existing ResourceDictionary to call XamlReader.Load on an existing XAMLXAML file stream that has a ResourceDictionary root, then casting the XamlReader.Load return value to ResourceDictionary.

URIs für zusammengeführte RessourcenwörterbücherMerged Resource Dictionary URIs

Um ein zusammengeführtes Ressourcenwörterbuch einzubinden, stehen mehrere Techniken zur Verfügung, die von dem von Ihnen verwendeten Uniform Resource Identifier (URI)uniform resource identifier (URI)-Format angegeben werden.There are several techniques for how to include a merged resource dictionary, which are indicated by the Uniform Resource Identifier (URI)uniform resource identifier (URI) format that you will use. 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.Broadly speaking, these techniques can be divided into two categories: resources that are compiled as part of the project, and resources that are not compiled as part of the project.

Bei Ressourcen, die als Teil des Projekts kompiliert werden, können Sie den relativen Pfad verwenden, der auf den Speicherort der Ressource verweist.For resources that are compiled as part of the project, you can use a relative path that refers to the resource location. Der relative Pfad wird während der Kompilierung ausgewertet.The relative path is evaluated during compilation. Die Ressource muss als Ressourcenbuildvorgang als Teil des Projekts definiert werden.Your resource must be defined as part of the project as a Resource build action. Wenn Sie eine Ressourcen-.xaml-Datei im Projekt als Ressource einbinden, müssen Sie die Ressourcendatei nicht in das Ausgabeverzeichnis kopieren. Die Ressource ist bereits in der kompilierten Anwendung enthalten.If you include a resource .xaml file in the project as Resource, you do not need to copy the resource file to the output directory, the resource is already included within the compiled application. Der Inhaltsbuildvorgang kann auch verwendet werden. Dann müssen Sie aber die Dateien in das Ausgabeverzeichnis kopieren. Außerdem müssen die Ressourcendateien in derselben Pfadbeziehung für die ausführbare Datei bereitgestellt werden.You can also use Content build action, but you must then copy the files to the output directory and also deploy the resource files in the same path relationship to the executable.

Hinweis

Verwenden Sie nicht den Eingebettete-Ressource-Buildvorgang.Do not use the Embedded Resource build action. Der Buildvorgang selbst wird für unterstützt WPFWPF Anwendungen, aber die Auflösung der Source nicht in integriert ResourceManager, und daher kann nicht die jeweiligen Ressource aus dem Datenstrom zu trennen.The build action itself is supported for WPFWPF applications, but the resolution of Source does not incorporate ResourceManager, and thus cannot separate the individual resource out of the stream. Weiterhin können eingebettete Ressource für andere Zwecken, solange Sie auch verwendet ResourceManager auf die Ressourcen zugreifen.You could still use Embedded Resource for other purposes so long as you also used ResourceManager to access the resources.

Bei einer ähnlichen Methode wird ein Paket-URI für eine XAMLXAML-Datei verwendet, auf die dann als Quelle verwiesen wird.A related technique is to use a Pack URI to a XAMLXAML file, and refer to it as Source. Ein Paket-URI ermöglicht Verweise auf Komponenten der Assemblys, auf die verwiesen wird, sowie andere Methoden.Pack URI enables references to components of referenced assemblies and other techniques. Weitere Informationen zu Paket-URIs finden Sie unter WPF-Anwendungsressource, Inhalts- und Datendateien.For more information on Pack URIs, see WPF Application Resource, Content, and Data Files.

Bei Ressourcen, die nicht als Teil des Projekts kompiliert werden, kann der URI zur Laufzeit ausgewertet werden.For resources that are not compiled as part of the project, the URI is evaluated at run time. Sie können einen allgemeinen URI-Transport wie file: oder http: verwenden, um auf die Ressourcendatei zu verweisen.You can use a common URI transport such as file: or http: to refer to the resource file. 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.The disadvantage of using the noncompiled resource approach is that file: access requires additional deployment steps, and http: access implies the Internet security zone.

Wiederverwendung von zusammengeführten WörterbüchernReusing Merged Dictionaries

Zusammengeführte Wörterbücher können wieder verwendet oder für mehrere Anwendungen freigegeben werden, da mit jedem gültigen Uniform Resource Identifier (URI)uniform resource identifier (URI) auf das zusammenzuführende Ressourcenwörterbuch verwiesen werden kann.You can reuse or share merged resource dictionaries between applications, because the resource dictionary to merge can be referenced through any valid Uniform Resource Identifier (URI)uniform resource identifier (URI). Der genaue Ablauf dieses Vorgangs hängt von der Bereitstellungsstrategie für Ihre Anwendung und dem verwendeten Anwendungsmodell ab.Exactly how you do this will depend on your application deployment strategy and which application model you follow. Die bereits erwähnte Paket-URI-Strategie bietet eine Möglichkeit, mit der Freigabe eines Assemblyverweises während der Entwicklung eine zusammengeführte Ressource für viele Projekte als häufige Quelle zu verwenden.The aforementioned Pack URI strategy provides a way to commonly source a merged resource across multiple projects during development by sharing an assembly reference. In diesem Szenario werden die Ressourcen weiterhin durch den Client verteilt, und mindestens eine der Anwendungen muss die Assembly bereitstellen, auf die verwiesen wird.In this scenario the resources are still distributed by the client, and at least one of the applications must deploy the referenced assembly. Es ist auch möglich, durch einen verteilten URI, der das HTTP-Protokoll verwendet, auf zusammengeführte Ressourcen zu verweisen.It is also possible to reference merged resources through a distributed URI that uses the http protocol.

Das Schreiben zusammengeführter Wörterbücher als lokale Anwendungsdateien ist ein weiteres mögliches Szenario für zusammengeführte Wörterbücher/Anwendungsbereitstellung.Writing merged dictionaries as local application files or to local shared storage is another possible merged dictionary / application deployment scenario.

LokalisierungLocalization

Wenn Ressourcen, die lokalisiert werden müssen, in Wörterbüchern isoliert werden, die in primäre Wörterbücher zusammengeführt und als lose XAMLXAML beibehalten werden, ist eine separate Lokalisierung dieser Dateien möglich.If resources that need to be localized are isolated to dictionaries that are merged into primary dictionaries, and kept as loose XAMLXAML, these files can be localized separately. Diese Technik stellt eine einfache Alternative zur Lokalisierung der Satellitenressourcenassemblys dar.This technique is a lightweight alternative to localizing the satellite resource assemblies. Weitere Informationen finden Sie unter Übersicht über WPF-Globalisierung und -Lokalisierung.For details, see WPF Globalization and Localization Overview.

Siehe auchSee also