x:Key, directive
Identifie de manière unique les éléments créés et référencés dans un dictionnaire défini par XAML. L’ajout d’une x:Key
valeur à un élément d’objet XAML est le moyen le plus courant d’identifier une ressource dans un dictionnaire de ressources, par exemple dans un fichier WPF ResourceDictionary.
Utilisation d'attributs XAML
<object x:Key="stringKeyValue".../>
-or-
<object x:Key="{markupExtensionUsage}".../>
Utilisation de l’attribut XAML (spécifique à WPF)
<object.Resources>
<object x:Key="stringKeyValue".../>
</object.Resources>
-or-
<object.Resources>
<object x:Key="{markupExtensionUsage}".../>
</object.Resources>
Valeurs XAML
Valeur | Description |
---|---|
stringKeyValue |
Chaîne de texte à utiliser comme clé. La chaîne de texte doit être conforme à la grammaire XamlName. |
markupExtensionUsage |
Dans les délimiteurs {}d’extension de balisage, une utilisation de l’extension de balisage qui fournit un objet à utiliser comme clé. Consultez la section Notes. |
Notes
x:Key
prend en charge le concept de dictionnaire de ressources XAML. XAML en tant que langage ne définit pas d’implémentation de dictionnaire de ressources, qui est laissée à des frameworks d’interface utilisateur spécifiques. Pour en savoir plus sur l’implémentation des dictionnaires de ressources XAML dans WPF, consultez Vue d’ensemble des ressources XAML (WPF .NET).
Dans XAML 2006 et WPF, x:Key
doivent être fournis en tant qu’attribut. Vous pouvez toujours utiliser des clés non chaînes, mais cela nécessite une utilisation de l’extension de balisage afin de fournir la valeur non chaîne sous forme d’attribut. Si vous utilisez XAML 2009, x:Key
vous pouvez être spécifié en tant qu’élément pour prendre en charge explicitement les dictionnaires clés par des types d’objets autres que des chaînes sans nécessiter d’extension de balisage intermédiaire. Consultez la section « XAML 2009 » de cette rubrique. Le reste de la section Notes s’applique spécifiquement à l’implémentation XAML 2006.
La valeur d’attribut de x:Key
peut être n’importe quelle chaîne définie dans la grammaire XamlName ou peut être un objet évalué par le biais d’une extension de balisage. Consultez « Notes d’utilisation WPF » pour obtenir un exemple de WPF.
Les éléments enfants d’un élément parent qui est une IDictionary implémentation doivent généralement inclure un x:Key
attribut qui spécifie une valeur de clé unique dans ce dictionnaire. Les frameworks peuvent implémenter des propriétés de clé alias pour x:Key
remplacer des types particuliers ; les types qui définissent ces propriétés doivent être attribués avec DictionaryKeyPropertyAttribute.
L’équivalent du code de spécification x:Key
est la clé utilisée pour le sous-jacent IDictionary. Par exemple, une x:Key
application dans le balisage d’une ressource dans WPF équivaut à la valeur du paramètre du ResourceDictionary.Add moment où vous ajoutez la ressource à un FICHIER WPF ResourceDictionary dans le key
code.
Notes d’utilisation WPF
Les objets enfants d’un objet parent qui est une IDictionary implémentation, comme WPF ResourceDictionary, doivent généralement inclure un x:Key
attribut, et la valeur de clé doit être unique dans ce dictionnaire. Il existe deux exceptions notables :
Certains types WPF déclarent une clé implicite pour l’utilisation du dictionnaire. Par exemple, un Style avec un TargetType, ou un DataTemplate avec un DataType, peut être dans une ResourceDictionary clé implicite et utiliser la clé implicite.
WPF prend en charge un concept de dictionnaire de ressources fusionné. Les clés peuvent être partagées entre les dictionnaires fusionnés et le comportement de clé partagée est accessible à l’aide FindResourcede . Pour plus d’informations, consultez dictionnaires de ressources fusionnés.
Dans l’implémentation XAML WPF globale et le modèle d’application, l’unicité de clé n’est pas case activée par le compilateur de balisage XAML. Au lieu de cela, les valeurs manquantes ou non uniques x:Key
provoquent des erreurs d’analyseur XAML au moment du chargement. Toutefois, la gestion visual Studio des dictionnaires pour WPF peut souvent noter ces erreurs dans la phase de conception.
Notez que dans la syntaxe indiquée, l’objet ResourceDictionary est implicite dans la façon dont le processeur XAML WPF produit une collection pour remplir une Resources collection. Un ResourceDictionary élément n’est généralement pas fourni explicitement en tant qu’élément dans le balisage, bien qu’il puisse être dans certains cas si vous le souhaitez pour plus de clarté (il s’agirait d’un élément objet de collection entre l’élément Resources de propriété et les éléments dans remplit le dictionnaire). Pour plus d’informations sur la raison pour laquelle un objet de collection est presque toujours un élément implicite dans le balisage, consultez syntaxe XAML en détail.
Dans l’implémentation XAML WPF, la gestion des clés de dictionnaire de ressources est définie par la ResourceKey classe abstraite. Toutefois, le processeur XAML WPF produit différents types d’extensions sous-jacents pour les clés en fonction de leurs utilisations. Par exemple, la clé d’une classe dérivée ou d’une DataTemplate classe dérivée est gérée séparément et produit un objet distinct DataTemplateKey .
Les clés et les noms utilisent différentes directives et éléments de langage (x:Key
et non x:Name
) dans la définition XAML de base. Les clés et les noms sont également utilisés dans différentes situations par la définition WPF et l’application de ces concepts. Pour plus d’informations, consultez les portées de noms XAML WPF.
Comme indiqué précédemment, la valeur d’une clé peut être fournie via une extension de balisage et peut être autre qu’une valeur de chaîne. Un exemple de scénario WPF est que la valeur peut x:Key
être un ComponentResourceKey. Certains contrôles exposent une clé de style de ce type pour une ressource de style personnalisée qui influence une partie de l’apparence et du comportement de ce contrôle sans remplacer totalement le style. Un exemple de telle clé est ButtonStyleKey.
La fonctionnalité de dictionnaire fusionné WPF introduit des considérations supplémentaires pour l’unicité clé et le comportement de recherche de clé. Pour plus d’informations, consultez dictionnaires de ressources fusionnés.
XAML 2009
XAML 2009 assouplit la restriction qui x:Key
doit toujours être fournie sous forme d’attribut.
Dans WPF, vous pouvez utiliser des fonctionnalités XAML 2009, mais uniquement pour XAML qui n’est pas compilé par balisage. Le code XAML compilé par balisage pour WPF et la forme BAML du code XAML ne prennent actuellement pas en charge les mots clés et les fonctionnalités XAML 2009.
Sous XAML 2009, vous pouvez spécifier x:Key
des éléments via l’utilisation suivante :
Utilisation des éléments XAML (XAML 2009 uniquement)
<object>
<x:Key>
keyObject
</x:Key>
...
</object>
Valeurs XAML
Valeur | Description |
---|---|
keyObject |
Élément Objet pour l’objet utilisé comme clé d’un object dictionnaire spécialisé. |
Le conteneur/parent pour ce type d’utilisation n’est pas affiché ici.
object
est censé être un enfant d’un élément objet qui représente une implémentation de dictionnaire spécialisé.keyObject
est censé être une instance d’objet (ou une valeur d’un type valeur) appropriée en tant que clé pour cette implémentation de dictionnaire spécialisée particulière.WPF n’implémente pas de dictionnaires qui nécessitent cette utilisation. Les clés d’objet sont plus une fonctionnalité générale du langage XAML, éventuellement utile pour certains scénarios de dictionnaire personnalisé où la création du dictionnaire en XAML est souhaitable. Pour les fonctionnalités WPF telles que les styles implicites qui utilisent des clés non-chaînes pour les ressources, d’autres techniques d’établissement ou de spécification des clés existent, de sorte que l’utilisation d’une clé d’objet n’est pas nécessaire.
keyObject
peut également être une utilisation de l’extension de balisage sous forme d’élément objet, plutôt qu’une instance d’objet directe.
Notes d’utilisation silverlight
x:Key
pour Silverlight est documenté séparément. Pour plus d’informations, consultez Xaml Namespace (x :) Language Features (Silverlight).
Voir aussi
.NET Desktop feedback