ComponentResourceKey-Markuperweiterung

Definiert und verweist auf Schlüssel für Ressourcen, die aus externen Assemblys geladen werden. Dadurch kann ein Ressourcenlookup einen Zieltyp in einer Assembly angeben, anstatt ein explizites Ressourcenwörterbuch in einer Assembly oder für eine Klasse anzugeben.

XAML-Attributsyntax (Einstellungsschlüssel, kompakt)

<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />  

XAML-Attributsyntax (Einstellungsschlüssel, ausführlich)

<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />  

XAML-Attributsyntax (anfordernde Ressource, kompakt)

<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />  

XAML-Attributsyntax (anfordernde Ressource, ausführlich)

<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />  

XAML-Werte

Wert BESCHREIBUNG
targetTypeName Der Name des öffentlichen CLR-Typs (Common Language Runtime), der in der Ressourcenassembly definiert ist.
targetID Der Schlüssel für die Ressource. Wenn ein Lookup von Ressourcen erfolgt, ist targetID analog zur x:Key-Direktive der Ressource.

Hinweise

Wie in den oben genannten Verwendungsbeispielen gesehen, wird eine {ComponentResourceKey}-Markuperweiterung an zwei Stellen verwendet:

  • Die Definition eines Schlüssels innerhalb eines Designressourcen-Wörterbuchs, wie von einem Steuerelementautor bereitgestellt.

  • Zugreifen auf eine Designressource aus der Assembly, wenn Sie das Steuerelement mit einer neuen Vorlage versehen, aber Eigenschaftswerte verwenden möchten, die von Ressourcen stammen, die von den Designs des Steuerelements bereitgestellt werden.

Für die Referenzierung von Komponentenressourcen, die aus Designs stammen, wird allgemein empfohlen, {DynamicResource} anstelle von {StaticResource} zu verwenden. Dies wird in den Verwendungsbeispielen gezeigt. {DynamicResource} wird empfohlen, weil das Design selbst vom Benutzer geändert werden kann. Wenn Sie die Komponentenressource verwenden möchten, die der Absicht des Autors des Steuerelements zur Unterstützung eines Designs am ehesten entspricht, sollten Sie Ihre Komponentenressourcenreferenz auch als dynamisch aktivieren.

TypeInTargetAssembly identifiziert einen Typ, der in der Zielassembly vorhanden ist, in der die Ressource tatsächlich definiert wird. Ein ComponentResourceKey kann ohne Kenntnis, wo genau die TypeInTargetAssembly definiert ist, definiert und verwendet werden, muss aber letztendlich den Typ durch referenzierte Assemblys auflösen.

Eine übliche Verwendung für ComponentResourceKey ist die Definition von Schlüsseln, die dann als Member einer Klasse bereitgestellt werden. Für dieses Szenario verwenden Sie den ComponentResourceKey-Klassenkonstruktor, nicht die Markuperweiterung. Weitere Informationen finden Sie unter ComponentResourceKey oder im Abschnitt „Definieren von Schlüsseln und Verweisen auf Schlüssel für Designressourcen“ des Themas Steuerelementerstellung: Übersicht.

Sowohl für die Erstellung von Schlüsseln als auch für die Referenzierung von mit Schlüsseln versehenen Ressourcen wird üblicherweise die Attributsyntax für die ComponentResourceKey-Markuperweiterung verwendet.

Die gezeigte kompakte Syntax basiert auf der ComponentResourceKey-Konstruktorsignatur und der Verwendung des Positionsparameters einer Markuperweiterung. Die Reihenfolge, in der targetTypeName und targetID angegeben werden, ist wichtig. Die ausführliche Syntax basiert auf dem parameterlosen ComponentResourceKey-Konstruktor und legt dann TypeInTargetAssembly und ResourceId auf eine Weise fest, die analog zu einer TRUE-Attributsyntax für ein Objektelement ist. Bei der ausführlichen Syntax ist die Reihenfolge, in der die Eigenschaften festgelegt werden, nicht wichtig. Die Beziehung und die Mechanismen dieser beiden Alternativen (kompakt und ausführlich) werden im Thema Markuperweiterungen und WPF-XAML ausführlicher beschrieben.

Technisch gesehen kann der Wert für targetID ein beliebiges Objekt sein, es muss sich nicht zwingend um eine Zeichenfolge handeln. Die häufigste Verwendung in WPF ist jedoch die Ausrichtung des targetID-Werts an Formen, bei denen es sich um Zeichenfolgen handelt, und dort, wo solche Zeichenfolgen in der XamlName-Grammatik gültig sind.

ComponentResourceKey kann auch in der Objektelementsyntax verwendet werden. In diesem Fall muss der Wert der beiden Eigenschaften TypeInTargetAssembly und ResourceId angegeben werden, um die Erweiterung ordnungsgemäß zu initialisieren.

In der XAML-Leserimplementierung von WPF wird die Verarbeitung dieser Markuperweiterung durch die ComponentResourceKey-Klasse definiert.

ComponentResourceKey ist eine Markuperweiterung. Markuperweiterungen werden in der Regel implementiert, wenn Attributwerte mit Escapezeichen versehen werden müssen, damit diese nicht als literale Werte oder als Handlernamen betrachtet werden, und diese Anforderung eher global und nicht nur durch den Einsatz von Typkonvertern für bestimmte Typen oder Eigenschaften erfüllt werden soll. Alle Markuperweiterungen in XAML verwenden die Zeichen { und } in der Attributsyntax. Dies ist die Konvention, durch die ein XAML-Prozessor erkennt, dass das Attribut von einer Markuperweiterung verarbeitet werden muss. Weitere Informationen finden Sie unter Markuperweiterungen und WPF-XAML.

Weitere Informationen