DynamicResource-Markuperweiterung
Stellt einen Wert für ein beliebiges XAML-Eigenschaftenattribut bereit, indem dieser Wert als Verweis für eine definierte Ressource festgelegt wird. Das Suchverhalten für diese Ressource ist analog zur Suche während der Laufzeit.
Verwendung von XAML-Attributen
<object property="{DynamicResource key}" .../>
Verwendung von XAML-Eigenschaftenelementen
<object>
<object.property>
<DynamicResource ResourceKey="key" .../>
</object.property>
</object>
XAML-Werte
key |
Der Schlüssel für die angeforderte Ressource. Dieser Schlüssel wurde ursprünglich vom x:Key-Direktive zugewiesen, falls im Markup eine Ressource erstellt wurde, oder er wurde als key-Parameter beim Aufrufen von ResourceDictionary.Add bereitgestellt, wenn die Ressource im Code erstellt wurde. |
Hinweise
Eine DynamicResource erstellt während der erstmaligen Kompilierung einen temporären Ausdruck und schiebt daher die Suche nach Ressourcen auf, bis der angeforderte Ressourcenwert tatsächlich erforderlich ist, um ein Objekt zu erstellen. Dies kann zum Beispiel erfolgen, nachdem die XAML-Seite geladen wurde. Der Ressourcenwert wird basierend auf einer Schlüsselsuche in allen aktiven Ressourcenwörterbüchern gefunden. Dabei wird mit dem aktuellen Seitenumfang begonnen, und der Ressourcenwert wird dann gegen den Platzhalterausdruck der Kompilierung ausgetauscht.
Wichtig |
---|
Hinsichtlich des Vorrangs einer Abhängigkeitseigenschaft entspricht ein DynamicResource-Ausdruck der Position, an der der Verweis auf die dynamische Ressource angewendet wird.Wenn Sie einen lokalen Wert für eine Eigenschaft festlegen, die vorher als lokalen Wert einen DynamicResource-Ausdruck aufwies, wird DynamicResource vollständig entfernt.Ausführliche Informationen finden Sie unter Priorität von Abhängigkeitseigenschaftswerten. |
Bestimmte Ressourcenzugriffsszenarios eignen sich besonders für DynamicResource, im Gegensatz zu StaticResource-Markuperweiterung. Informationen zu den relativen Vorteilen und Leistungsaspekten von DynamicResource und StaticResource finden Sie unter Übersicht über Ressourcen.
Der angegebene ResourceKey sollte einer vorhandenen Ressource entsprechen, die mithilfe von x:Key-Direktive auf einer Ebene der Seite, der Anwendung, der verfügbaren Steuerelementdesigns oder der externen Ressourcen bzw. Systemressourcen festgelegt wird. Die Ressourcensuche wird in dieser Reihenfolge durchgeführt. Weitere Informationen zur Ressourcensuche für statische und dynamische Ressourcen finden Sie unter Übersicht über Ressourcen.
Ein Ressourcenschlüssel kann eine beliebige Zeichenfolge sein, die in der XamlName-Grammatik definiert ist. Bei einem Ressourcenschlüssel kann es sich auch um andere Objekttypen handeln, z. B. einen Type. Ein Type-Schlüssel ist von wesentlicher Bedeutung dafür, wie Steuerelemente mithilfe von Designs formatiert werden können. Weitere Informationen finden Sie unter Übersicht über das Erstellen von Steuerelementen.
Bei APIs zum Suchen nach Ressourcenwerten, z. B. FindResource, wird dieselbe Logik für Ressourcensuchen wie bei DynamicResource verwendet.
Die alternative Deklarationsmöglichkeit zum Verweisen auf eine Ressource ist eine 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 der Objektelementsyntax verwendet werden. In diesem Fall muss der Wert für die ResourceKey-Eigenschaft angegeben werden.
DynamicResource kann zudem in einer ausführlichen Attributverwendung genutzt 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 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, anhand der ein XAML-Prozessor erkennt, dass das Attribut von einer Markuperweiterung verarbeitet werden muss. Weitere Informationen finden Sie unter Markuperweiterungen und WPF-XAML.
Siehe auch
Referenz
StaticResource-Markuperweiterung