ComponentResourceKey-Markuperweiterung
Definiert und verweist auf Schlüssel für Ressourcen, die aus externen Assemblys geladen werden. Dadurch kann eine Ressourcenabfrage einen Zieltyp innerhalb einer Assembly anstelle eines expliziten Ressourcenwörterbuchs in einer Assembly oder einer Klasse angeben.
XAML-Attributverwendung (Einstellungsschlüssel, Komprimierung)
<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />
XAML-Attributverwendung (Schlüssel für Einstellungen, ausführlich)
<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />
XAML-Attributverwendung (Anfordern einer Ressource, Komprimieren)
<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />
XAML-Attributverwendung (anfordernde Ressource, ausführlich)
<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />
XAML-Werte
Wert | Beschreibung |
---|---|
targetTypeName |
Der Name des öffentlichen Common Language Runtime (CLR)-Typs, der in der Ressourcenassembly definiert ist. |
targetID |
Der Schlüssel für die Ressource. Wenn Ressourcen nachgeschlagen werden, ist targetID analog zur x:Key-Direktive der Ressource. |
Bemerkungen
Wie in den obigen Verwendungen gezeigt, wird eine Verwendung einer {ComponentResourceKey
} Markup-Erweiterung an zwei Stellen gefunden.
Die Definition eines Schlüssels innerhalb eines Designressourcenverzeichnisses, wie von einem Steuerelementautor bereitgestellt.
Beim Zugreifen auf eine Designressource aus der Assembly, wenn Sie das Steuerelement neu gestalten, aber Eigenschaftswerte verwenden möchten, die aus Ressourcen stammen, die von den Designs des Steuerelements bereitgestellt werden.
Für das Verweisen auf Komponentenressourcen, die aus Themen stammen, wird allgemein empfohlen, {DynamicResource}
anstelle von {StaticResource}
zu verwenden. Dies wird in den Verwendungszwecken angezeigt. {DynamicResource}
wird empfohlen, da das Design selbst vom Benutzer geändert werden kann. Wenn Sie möchten, dass die Komponentenressource der Absicht des Entwicklers des Steuerelements am besten entspricht, um ein Design zu unterstützen, sollten Sie den Komponentenressourcenverweis ebenfalls dynamisch gestalten.
Die TypeInTargetAssembly identifiziert einen Typ, der in der Zielassembly vorhanden ist, in der die Ressource tatsächlich definiert ist. Ein ComponentResourceKey
kann unabhängig davon definiert und verwendet werden, wo die TypeInTargetAssembly definiert ist, aber schließlich muss der Typ durch referenzierte Assemblys aufgelöst werden.
Eine häufige Verwendung von ComponentResourceKey besteht darin, Schlüssel zu definieren, die dann als Mitglieder einer Klasse verfügbar gemacht werden. Für diese Verwendung nutzen Sie den ComponentResourceKey-Klassenkonstruktor, nicht die Markup-Erweiterung. Weitere Informationen finden Sie unter ComponentResourceKeyoder im Abschnitt "Definieren und Verweisen auf Schlüssel für Designressourcen" des Themas Übersicht über die Steuerelementerstellung.
Für das Erstellen von Schlüsseln und das Verweisen auf Schlüsselressourcen wird die Attributsyntax häufig für die Markuperweiterung ComponentResourceKey
verwendet.
Die dargestellte kompakte Syntax basiert auf der ComponentResourceKey-Konstruktorsignatur und der Verwendung von Positionsparametern einer Markup-Erweiterung. Die Reihenfolge, in der die targetTypeName
und targetID
angegeben werden, ist wichtig. Die ausführliche Syntax stützt sich auf den parameterlosen ComponentResourceKey-Konstruktor und legt dann auf eine Weise die TypeInTargetAssembly und ResourceId fest, die mit der echten Attributsyntax eines Objektelements vergleichbar ist. In der ausführlichen Syntax ist die Reihenfolge, in der die Eigenschaften angegeben werden, nicht wichtig. Das Verhältnis und die Mechanismen dieser beiden Alternativen (kompakt und ausführlich) werden im Thema Markuperweiterungen und WPF-XAMLausführlicher beschrieben.
Technisch gesehen kann der Wert für targetID
ein beliebiges Objekt sein, es muss keine Zeichenfolge sein. Die häufigste Verwendung in WPF besteht jedoch darin, den targetID
-Wert mit einem Formular abzustimmen, das Zeichenfolgen enthält und bei denen solche Zeichenfolgen in der XamlName-Grammatikgültig sind.
ComponentResourceKey
kann in der Objektelementsyntax verwendet werden. In diesem Fall ist die Angabe des Werts der eigenschaften TypeInTargetAssembly und ResourceId erforderlich, um die Erweiterung ordnungsgemäß zu initialisieren.
In der WPF-XAML-Readerimplementierung wird die Behandlung dieser Markuperweiterung durch die ComponentResourceKey-Klasse definiert.
ComponentResourceKey
ist eine Markup-Erweiterung. Markuperweiterungen werden in der Regel implementiert, wenn es erforderlich ist, Attributwerte so zu gestalten, dass sie keine reinen Literalwerte oder Handlernamen sind, und diese Anforderung umfassender ist, als nur Typkonverter für bestimmte Typen oder Eigenschaften zu verwenden. Alle Markuperweiterungen in XAML verwenden die Zeichen {und } in ihrer Attributsyntax. Dies ist die Konvention, mit der ein XAML-Prozessor erkennt, dass eine Markuperweiterung das Attribut verarbeiten muss. Weitere Informationen finden Sie unter Markup-Erweiterungen und WPF-XAML.
Siehe auch
.NET Desktop feedback