x:Name, directive

Identifie de manière unique les éléments XAML définis dans un namescope XAML. Les portées de noms XAML et leurs modèles d’unicité peuvent être appliqués aux objets instanciés, lorsque les frameworks fournissent des API ou implémentent des comportements qui accèdent au graphique objet créé par XAML au moment de l’exécution.

Utilisation d'attributs XAML

<object x:Name="XAMLNameValue".../>

Valeurs XAML

Valeur Description
XAMLNameValue Chaîne conforme aux restrictions de la grammaire XamlName.

Notes

Une fois x:Name appliqué au modèle de programmation de stockage d’un framework, le nom équivaut à la variable qui contient une référence d’objet ou une instance retournée par un constructeur.

La valeur d’une x:Name utilisation de directive doit être unique dans un namescope XAML. Par défaut, lorsqu’il est utilisé par l’API des services XAML .NET, le nomscope XAML principal est défini au niveau de l’élément racine XAML d’une seule production XAML et englobe les éléments contenus dans cette production XAML. D’autres portées de noms XAML discrètes qui peuvent se produire dans une seule production XAML peuvent être définies par des frameworks pour traiter des scénarios spécifiques. Par exemple, dans WPF, les nouveaux namescopes XAML sont définis et créés par n’importe quel modèle qui est également défini sur cette production XAML. Pour plus d’informations sur les namescopes XAML (écrits pour WPF mais pertinents pour de nombreux concepts de namescope XAML), consultez les portées de noms XAML WPF.

En général, x:Name ne doit pas être appliqué dans les situations qui utilisent x:Keyégalement . Les implémentations XAML par des frameworks existants spécifiques ont introduit des concepts de substitution entre x:Key et x:Name, mais ce n’est pas une pratique recommandée. Les services XAML .NET ne prennent pas en charge ces concepts de substitution lors de la gestion des informations de nom/clé telles que INameScope ou DictionaryKeyPropertyAttribute.

Les règles d’autorisation ainsi que l’application de l’unicité du x:Name nom sont potentiellement définies par des frameworks d’implémentation spécifiques. Toutefois, pour être utilisables avec les services XAML .NET, les définitions d’infrastructure de l’unicité de la portée de noms XAML doivent être cohérentes avec la définition des INameScope informations de cette documentation et doivent utiliser les mêmes règles concernant l’endroit où les informations sont appliquées. Par exemple, l’implémentation de Windows Presentation Foundation (WPF) divise différents éléments de balisage en plages distinctes NameScope , telles que les dictionnaires de ressources, l’arborescence logique créée par le code XAML au niveau de la page, les modèles et d’autres contenus différés, puis applique l’unicité du nom XAML dans chacune de ces portées de noms XAML.

Pour les types personnalisés qui utilisent des enregistreurs d’objets XAML services XAML .NET, une propriété qui est mappée à x:Name un type peut être établie ou modifiée. Vous définissez ce comportement en référençant le nom de la propriété à mapper avec le RuntimeNamePropertyAttribute code de définition de type. RuntimeNamePropertyAttribute est un attribut de niveau type.

Using.NET services XAML, la logique de stockage pour la prise en charge de la portée de noms XAML peut être définie de manière neutre pour l’infrastructure en implémentant l’interface INameScope .

Notes d’utilisation WPF

Sous la configuration de build standard d’une application WPF qui utilise XAML, des classes partielles x:Name et du code-behind, le nom spécifié devient le nom d’un champ créé dans le code sous-jacent lorsque XAML est traité par une tâche de génération de compilation de balisage et que ce champ contient une référence à l’objet. Par défaut, le champ créé est interne. Vous pouvez modifier l’accès aux champs en spécifiant l’attribut x :FieldModifier. Dans WPF et Silverlight, la séquence est que la compilation de balisage définit et nomme le champ dans une classe partielle, mais que la valeur est initialement vide. Ensuite, une méthode générée nommée InitializeComponent est appelée à partir du constructeur de classe. InitializeComponent se compose d’appels FindName utilisant chacune des x:Name valeurs qui existent dans la partie xaml définie par la classe partielle en tant que chaînes d’entrée. Les valeurs de retour sont ensuite attribuées à la référence de champ nommé comme pour remplir les valeurs de champ avec des objets créés à partir de l’analyse XAML. L’exécution de ce qui permet de InitializeComponent référencer le graphique d’objet d’exécution à l’aide du x:Name nom /champ directement, plutôt que de devoir appeler FindName explicitement chaque fois que vous avez besoin d’une référence à un objet défini par XAML.

Pour une application WPF qui utilise les cibles Microsoft Visual Basic et inclut des fichiers XAML avec Page une action de génération, une propriété de référence distincte est créée lors de la compilation qui ajoute le WithEvents mot clé à tous les éléments qui ont une x:Namesyntaxe , afin de prendre en charge Handles la syntaxe des délégués de gestionnaire d’événements. Cette propriété est toujours publique. Pour plus d’informations, consultez Gestion des événements Visual Basic et WPF.

x:Name est utilisé par le processeur XAML WPF pour inscrire un nom dans un namescope XAML au moment du chargement, même si la page n’est pas compilée par des actions de génération (par exemple, xaml libre d’un dictionnaire de ressources). L’une des raisons de ce comportement est que la x:Name liaison est potentiellement nécessaire ElementName . Pour plus d’informations, consultez Vue d’ensemble de la liaison de données.

Comme mentionné précédemment, x:Name (ou Name) ne doit pas être appliqué dans des situations qui utilisent x:Keyégalement . WpF ResourceDictionary a un comportement spécial de se définir comme un namescope XAML, mais en retournant des valeurs Non implémentées ou Null pour INameScope les API comme moyen d’appliquer ce comportement. Si l’analyseur XAML WPF rencontre Name ou x:Name dans un xaml défini ResourceDictionary, le nom n’est ajouté à aucun namescope XAML. Toute tentative de recherche de ce nom à partir d’un namescope XAML et les FindName méthodes ne retournent pas de résultats valides.

x :Name et Name

De nombreux scénarios d’application WPF peuvent éviter toute utilisation de l’attribut x:Name , car la Name propriété de dépendance spécifiée dans l’espace de noms XAML par défaut pour plusieurs des classes de base importantes telles que FrameworkElement et FrameworkContentElement satisfait à ce même objectif. Il existe toujours des scénarios XAML et WPF courants où l’accès au code à un élément sans Name propriété au niveau de l’infrastructure est important. Par exemple, certaines classes de prise en charge de l’animation et du storyboard ne prennent pas en charge une Name propriété, mais elles doivent souvent être référencées dans le code pour contrôler l’animation. Vous devez spécifier x:Name en tant qu’attribut sur des chronologie et des transformations créées en XAML, si vous envisagez de les référencer à partir du code ultérieurement.

Si Name elle est disponible en tant que propriété sur la classe et Namex:Name peut être utilisée de manière interchangeable en tant qu’attributs, mais une exception d’analyse entraîne la spécification des deux sur le même élément. Si le code XAML est compilé, l’exception se produit sur la compilation de balisage, sinon elle se produit lors du chargement.

Name peut être défini à l’aide de la syntaxe d’attribut XAML et dans le code à l’aide SetValuede ; notez toutefois que la définition de la propriété dans le Name code ne crée pas la référence de champ représentative dans le namescope XAML dans la plupart des cas où le code XAML est déjà chargé. Au lieu de tenter de définir Name dans le code, utilisez NameScope des méthodes à partir du code, par rapport à la portée de nom appropriée.

Name peut également être défini à l’aide de la syntaxe d’élément de propriété avec du texte interne, mais cela est rare. En revanche, 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 SetValuede ; il ne peut être défini qu’à l’aide de la syntaxe d’attribut sur les objets, car il s’agit d’une directive.

Notes d’utilisation silverlight

x:Name pour Silverlight est documenté séparément. Pour plus d’informations, consultez Xaml Namespace (x :) Language Features (Silverlight).

Voir aussi