Partager via


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