ComponentResourceKey-Markuperweiterung
Definiert und verweist auf Schlüssel für Ressourcen, die aus externen Assemblys geladen werden. Dadurch kann in einem Ressourcenlookup ein Zieltyp in einer Assembly angegebenen werden, und es muss nicht explizit ein Ressourcenwörterbuch in einer Assembly oder einer Klasse angegeben werden.
Verwendung von XAML-Attributen (Festlegen des Schlüssels, kompakt)
<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" .../>
Verwendung von XAML-Attributen (Festlegen des Schlüssels, ausführlich)
<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" .../>
Verwendung von XAML-Attributen (Anfordern der Ressource, kompakt)
<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" .../>
Verwendung von XAML-Attributen (Anfordern der Ressource, ausführlich)
<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" .../>
XAML-Werte
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 gesucht werden, ist targetID analog zum x:Key-Direktive der Ressource. |
Hinweise
Wie oben in den Verwendungen zu sehen war, kann eine {ComponentResourceKey } Markuperweiterungsverwendung an zwei Stellen gefunden werden:
Die Definition eines Schlüssels in einem Designressourcenwörterbuch, wie von einem Steuerelementautor bereitgestellt.
Beim Zugreifen auf eine Designressource von der Assembly, wenn Sie eine neue Vorlage für das Steuerelement verwenden, aber die Eigenschaftswerte nutzen möchten, die von Ressourcen kommen,die von den Designs des Steuerelements bereitgestellt werden.
Zum Verweisen auf Komponentenressourcen, die aus Designs kommen, wird im Allgemeinen empfohlen, dass Sie {DynamicResource} statt {StaticResource} verwenden. Dies wird in den Verwendungen angezeigt. {DynamicResource} wird empfohlen, da das Design selbst vom Benutzer geändert werden kann. Wenn Sie die Komponentenressource möchten, die am besten der Absicht des Steuerelementautors zur Unterstützung eines Designs entspricht, sollten Sie der Komponentenressourcenverweis ermöglichen, auch dynamisch zu sein.
Mit TypeInTargetAssembly wird ein Typ bestimmt, der als Typ in der Zielassembly vorhanden ist, in der die Ressource eigentlich definiert wird. Ein ComponentResourceKey kann auch ohne genaue Kenntnisse darüber, wo TypeInTargetAssembly definiert ist, definiert und verwendet werden, muss den Typ jedoch letztlich über Assemblys auflösen, auf die verwiesen wird.
Eine häufige Verwendung für ComponentResourceKey ist die Definition von Schlüsseln, die dann als Member einer Klasse verfügbar gemacht werden. Für diese Verwendung müssen Sie den ComponentResourceKey-Klassenkonstruktor einsetzen, nicht die Markuperweiterung. Weitere Informationen finden Sie unter ComponentResourceKey oder im Abschnitt "Definieren und Angeben von Schlüsseln für Designressourcen" des Themas Übersicht über das Erstellen von Steuerelementen.
Sowohl beim Einrichten von Schlüsseln sowie Verweisen auf Ressourcen mit Schlüsseln wird die Attributsyntax häufig für die ComponentResourceKey-Markuperweiterung verwendet.
Die dargestellte kompakte Syntax stützt sich auf die ComponentResourceKey.ComponentResourceKey-Konstruktorsignatur und die positionelle Parameternutzung einer Markuperweiterung. Die Reihenfolge, in der targetTypeName und targetID angegeben werden, ist wichtig. Die ausführliche Syntax stützt sich auf den ComponentResourceKey.ComponentResourceKey-Standardkonstruktor. Dann werden TypeInTargetAssembly und ResourceId in analoger Weise zur tatsächlichen Attributsyntax für ein Objektelement festgelegt. In der ausführlichen Syntax ist die Reihenfolge, in der die Eigenschaften festgelegt werden, nicht wichtig. Die Beziehung und die Mechanismen dieser Alternativen (kompakt und ausführlich) werden detaillierter im Thema Markuperweiterungen und WPF-XAML beschrieben.
Technisch kann der Wert für targetID jedes Objekt sein, es muss keine Zeichenfolge sein. Die gängigste Verwendung in WPF ist jedoch, den targetID-Wert an Formularen auszurichten, die Zeichenfolgen sind, und wo solche Zeichenfolgen im XamlName-Grammatik gü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 Verarbeitung dieser Markuperweiterung von der 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, anhand der ein XAML-Prozessor erkennt, dass das Attribut von einer Markuperweiterung verarbeitet werden muss. Weitere Informationen finden Sie unter Markuperweiterungen und WPF-XAML.