x:Key-Attribut
Aktualisiert: November 2007
Kennzeichnet Elemente eindeutig, die als Ressourcen erstellt und referenziert werden und sich in einem ResourceDictionary befinden.
Verwendung von XAML-Attributen
<object.Resources>
<object x:Key="stringKeyValue".../>
</object.Resources>
XAML-Werte
stringKeyValue |
Eine true-Zeichenfolge, die als Schlüssel verwendet wird und XamlName-Grammatik entsprechen muss. - oder - Eine Markuperweiterung, die einen alternativen Objekttyp bereitstellt, der als Schlüssel dient. Siehe Hinweise. |
Hinweise
Untergeordnete Elemente eines übergeordneten Elements, bei dem es sich um eine IDictionary-Implementierung wie z. B. ResourceDictionary handelt, müssen im Allgemeinen ein x:Key-Attribut enthalten, das einen eindeutigen Schlüsselwert in diesem Wörterbuch angibt. Ausnahmen sind Style mit TargetType oder DataTemplate mit DataType, die beide bereits über einen implizierten Schlüssel verfügen. Die Schlüsseleindeutigkeit wird zur Ladezeit von der WPFXAML-Prozessorimplementierung erzwungen. Fehlende und/oder nicht eindeutige x:Key-Werte führen zu Ladezeitfehlern.
Der Attributwert von x:Key kann jede in XamlName-Grammatik definierte Zeichenfolge oder ein durch eine Markuperweiterung ausgewertetes Objekt sein. Zum Beispiel könnte der Wert von x:Key ein ComponentResourceKey sein. Dieses Szenario wird verwendet, wenn bestimmte Steuerelemente einen Stilschlüssel verfügbar machen, mit dem eine benutzerdefinierte Stilressource erstellt werden kann, die Aussehen und Verhalten dieses Steuerelements beeinflusst, ohne den Stil vollständig zu ersetzen. Ein Beispiel für einen solchen Schlüssel ist ButtonStyleKey.
Beachten Sie, dass in der gezeigten Syntax das ResourceDictionary-Objekt implizit angibt, wie der XAML-Prozessor eine Auflistung zum Füllen einer Resources-Auflistung erstellt. Es wird in der Regel nicht explizit als Element im Markup bereitgestellt, obwohl dies aus Gründen der Anschaulichkeit möglich ist (hierbei würde es sich um ein Eigenschaftenelement der Auflistung zwischen dem Resources-Eigenschaftenelement und den darin enthaltenen Elementen handeln, von denen das Wörterbuch gefüllt wird). Details dazu, warum ein Auflistungsobjekt ein implizites Element im Markup ist, finden Sie unter Terminologie der XAML-Syntax.
In der WPF XAML-Prozessorimplementierung wird die Handhabung dieser Markuperweiterung durch die abstrakte ResourceKey-Klasse definiert. Der WPFXAML-Prozessor erstellt jedoch je nach ihrer Verwendung unterschiedliche zugrunde liegende Erweiterungstypen für Schlüssel. So wird z. B. der Schlüssel für DataTemplate oder abgeleitete Klassen getrennt verarbeitet und ein anderes DataTemplateKey-Objekt erstellt.
Schlüssel und Namen sind keine identischen Konzepte, sie schließen sich gemäß der WPF-Definition dieser Konzepte sogar gegenseitig aus. Ausführliche Informationen finden Sie unter WPF-Namescopes.
Der Code, der zum Festlegen von x:Key dient, entspricht dem Schlüssel von Vorgängen, die einen Schlüssel mit dem zugrunde liegenden IDictionary verwenden. So entspricht z. B. ein im Markup angewendeter x:Key dem Wert des key-Parameters von ResourceDictionary.Add, wenn Sie die Ressource einem ResourceDictionary hinzufügen. (x:Key ist ein XAML-Sprachfeature. Es ist nicht ausschließlich für ResourceDictionary vorgesehen, dies ist jedoch die häufigste Anwendung von x:Key in der WPF XAML-Implementierung.)