DynamicResource-Markuperweiterung

Stellt einen Wert für ein beliebiges XAML-Eigenschaftsattribut bereit, indem dieser Wert als Verweis auf eine definierte Ressource angesehen wird. Das Lookupverhalten für diese Ressource ist analog zum Lookupvorgang zur Laufzeit.

Verwendung von XAML-Attributen

<object property="{DynamicResource key}" ... />  

Verwendung von XAML-Eigenschaftenelementen

<object>  
  <object.property>  
    <DynamicResource ResourceKey="key" ... />  
  </object.property>  
</object>  

XAML-Werte

Wert Beschreibung
key Der Schlüssel für die angeforderte Ressource. Dieser Schlüssel wurde ursprünglich durch die x:Key-Anweisung zugewiesen, wenn eine Ressource in Markup erstellt wurde, oder wurde als key-Parameter beim Aufruf von ResourceDictionary.Add angegeben, wenn die Ressource in Code erstellt wurde.

Hinweise

Eine DynamicResource erstellt einen temporären Ausdruck während der anfänglichen Kompilierung und verzögert somit Lookupvorgänge für Ressourcen, bis der angeforderte Ressourcenwert tatsächlich erforderlich ist, um ein Objekt zu erstellen. Dies kann möglicherweise nach dem Laden der XAML-Seite geschehen. Der Ressourcenwert wird auf der Grundlage einer Schlüsselsuche in allen aktiven Ressourcenwörterbüchern ab dem aktuellen Seitenbereich gefunden und wird durch den Platzhalterausdruck aus der Kompilierung ersetzt.

Wichtig

In Bezug auf den Vorrang von Abhängigkeitseigenschaften entspricht ein DynamicResource-Ausdruck der Position, an der der dynamische Ressourcenverweis angewendet wird. Wenn Sie einen lokalen Wert für eine Eigenschaft festlegen, die zuvor einen DynamicResource-Ausdruck als lokalen Wert hatte, wird die DynamicResource vollständig entfernt. Weitere Informationen finden Sie unter Priorität von Abhängigkeitseigenschaftswerten.

Bestimmte Ressourcenzugriffsszenarien sind besonders geeignet für eine DynamicResource im Gegensatz zu einer StaticResource-Markuperweiterung. Weitere Informationen zu den relativen Vorteilen und Leistungsauswirkungen von DynamicResource und StaticResource finden Sie unter XAML-Ressourcen.

Der angegebene ResourceKey sollte einer vorhandenen Ressource entsprechen, die durch die x:Key-Anweisung auf irgendeiner Ebene in Ihrer Seite, Anwendung, den verfügbaren Kontrollthemen und externen Ressourcen oder Systemressourcen bestimmt wird, und Lookupvorgänge von Ressourcen erfolgen in dieser Reihenfolge. Weitere Informationen zum Lookup von Ressourcen für statische und dynamische Ressourcen finden Sie unter XAML-Ressourcen.

Ein Ressourcenschlüssel kann eine beliebige in der XamlName-Grammatik definierte Zeichenfolge sein. Ein Ressourcenschlüssel kann auch ein anderer Objekttyp sein, z. B. ein Type. Ein Type-Schlüssel ist grundlegend dafür, wie Steuerelemente durch Designs gestaltet werden können. Weitere Informationen finden Sie unter Übersicht über das Erstellen von Steuerelementen.

APIs für Lookupvorgänge von Ressourcenwerten (z. B. FindResource) folgen der gleichen Ressourcenlookuplogik, die von DynamicResource verwendet wird.

Die alternative deklarative Möglichkeit, auf eine Ressource zu verweisen, besteht in einer StaticResource-Markuperweiterung.

Die Attributsyntax ist die mit dieser Markuperweiterung am häufigsten verwendete Syntax. Das Zeichenfolgentoken, das auf die DynamicResource-Bezeichnerzeichenfolge folgt, wird als ResourceKey-Wert der zugrunde liegenden DynamicResourceExtension-Erweiterungsklasse zugeordnet.

DynamicResource kann in Objektelementsyntax verwendet werden. In diesem Fall ist die Angabe des Werts der ResourceKey-Eigenschaft erforderlich.

DynamicResource kann zudem in einer ausführlichen Attributverwendung verwendet werden, die die ResourceKey-Eigenschaft als Eigenschaft=Wert-Paar angibt:

<object property="{DynamicResource ResourceKey=key}" ... />  

Die ausführliche Verwendung ist häufig hilfreich, wenn für eine Erweiterung mehr als eine Eigenschaft festgelegt werden kann oder wenn bestimmte Eigenschaften optional sind. Da für DynamicResource nur eine (erforderliche) Eigenschaft festgelegt werden kann, ist diese ausführliche Verwendung unüblich.

In der WPF-XAML-Prozessorimplementierung wird die Handhabung dieser Markuperweiterung durch die DynamicResourceExtension-Klasse definiert.

DynamicResource 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