Attribut x:Name
Identifie de manière unique les éléments d’objet pour l’accès à l’objet instancié à partir du code-behind ou du code général. Une fois appliqué à un modèle de programmation de stockage, x :Name peut être considéré comme équivalent à la variable contenant une référence d’objet, comme retourné par un constructeur.
Utilisation des attributs XAML
<object x:Name="XAMLNameValue".../>
Valeurs XAML
Terme | Description |
---|---|
XAMLNameValue | Chaîne conforme aux restrictions de la grammaire XamlName. |
Grammaire XamlName
Voici la grammaire normative d’une chaîne utilisée comme clé dans cette implémentation XAML :
XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
- Les caractères sont limités à la plage ASCII inférieure, et plus spécifiquement aux lettres majuscules et minuscules de l’alphabet romain, aux chiffres et au caractère de soulignement (_).
- La plage de caractères Unicode n’est pas prise en charge.
- Un nom ne peut pas commencer par un chiffre. Certaines implémentations d’outils ont ajouté un trait de soulignement (_) à une chaîne si l’utilisateur fournit un chiffre comme caractère initial ou que l’outil génère automatiquement des valeurs x :Name en fonction d’autres valeurs qui contiennent des chiffres.
Notes
Le x :Name spécifié devient le nom d’un champ créé dans le code sous-jacent lorsque le code XAML est traité, et ce champ contient une référence à l’objet. Le processus de création de ce champ est effectué par les étapes cibles MSBuild, qui sont également responsables de la jonction des classes partielles pour un fichier XAML et de son code-behind. Ce comportement n’est pas nécessairement le langage XAML spécifié ; il s’agit de l’implémentation particulière que plateforme Windows universelle programmation (UWP) pour XAML s’applique à l’utilisation de x :Name dans ses modèles de programmation et d’application.
Chaque x :Name défini doit être unique dans un namescope XAML. En règle générale, un namescope XAML est défini au niveau de l’élément racine d’une page chargée et contient tous les éléments sous cet élément dans une seule page XAML. D’autres portées de noms XAML sont définies par n’importe quel modèle de contrôle ou modèle de données défini sur cette page. Au moment de l’exécution, un autre namescope XAML est créé pour la racine de l’arborescence d’objets créée à partir d’un modèle de contrôle appliqué, ainsi que par les arborescences d’objets créées à partir d’un appel à XamlReader.Load. Pour plus d’informations, consultez les portées de noms XAML.
Les outils de conception génèrent souvent automatiquement des valeurs x :Name pour les éléments lorsqu’ils sont introduits dans l’aire de conception. Le schéma de génération automatique varie selon le concepteur que vous utilisez, mais un schéma classique consiste à générer une chaîne qui commence par le nom de classe qui sauvegarde l’élément, suivie d’un entier avancé. Par exemple, si vous introduisez le premier élément Button au concepteur, vous pouvez voir que, dans le code XAML, cet élément a la valeur d’attribut x :Name de « Button1 ».
x :Name ne peut pas être défini dans la syntaxe de l’élément de propriété XAML ou dans le code à l’aide de SetValue. x :Name ne peut être défini qu’à l’aide de la syntaxe d’attribut XAML sur les éléments.
Remarque Plus précisément pour les applications C++/CX, un champ de stockage pour une référence x :Name n’est pas créé pour l’élément racine d’un fichier ou d’une page XAML. Si vous devez référencer l’objet racine à partir du code-behind C++, utilisez d’autres API ou traversées d’arborescences. Par exemple, vous pouvez appeler FindName pour un élément enfant nommé connu, puis appeler Parent.
x :Name et autres propriétés Name
Certains types utilisés en XAML UWP ont également une propriété nommée Name. Par exemple, FrameworkElement.Name et TextElement.Name.
Si Name est disponible en tant que propriété settable sur un élément, Name et x :Name peuvent être utilisés de manière interchangeable en XAML, mais une erreur se produit si les deux attributs sont spécifiés sur le même élément. Il existe également des cas où il existe une propriété Name , mais qu’elle est en lecture seule (comme VisualState.Name). Si c’est le cas, vous utilisez toujours x :Name pour nommer cet élément dans le code XAML et que le nom en lecture seule existe pour un scénario de code moins courant.
NotezFrameworkElement.Name généralement ne doit pas être utilisé comme moyen de modifier les valeurs initialement définies par x :Name, bien qu’il existe des scénarios qui sont des exceptions à cette règle générale. Dans les scénarios classiques, la création et la définition de portées de noms XAML est une opération de processeur XAML. La modification d’FrameworkElement.Name au moment de l’exécution peut entraîner un alignement de nommage de champ xaml /nommage de champ privé incohérent, ce qui est difficile à suivre dans votre code-behind.
x :Name et x :Key
x :Name peut être appliqué en tant qu’attribut aux éléments d’un ResourceDictionary pour agir comme substitut de l’attribut x :Key. (Il s’agit d’une règle selon laquelle tous les éléments d’un ResourceDictionary doit avoir un attribut x :Key ou x :Name.) Cela est courant pour les animations storyboarded. Pour plus d’informations, consultez la section des références de ressources ResourceDictionary et XAML.