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 des attributs XAML
<object x:Name="XAMLNameValue".../>
Valeurs XAML
Valeur | Description |
---|---|
XAMLNameValue |
Chaîne conforme aux restrictions de la grammaire xamlName . |
Remarques
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 utilisation d’une directive x:Name
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 portées de noms XAML (écrites pour WPF, mais pertinentes pour de nombreux concepts de portée de noms XAML), consultez des portées de noms XAML WPF.
En général, x:Name
ne doit pas être appliqué dans des situations qui utilisent également x:Key
. 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 des x:Name
ainsi que l’application de l’unicité du 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 d’informations INameScope dans 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 de NameScope distinctes, 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 chacun de ces namescopes XAML.
Pour les types personnalisés qui utilisent des enregistreurs d’objets XAML services XAML .NET, une propriété qui correspond à x:Name
sur 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 la RuntimeNamePropertyAttribute dans le code de définition de type.
RuntimeNamePropertyAttribute est un attribut de niveau type.
Using.NET services XAML, la logique de stockage de 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 et du code-behind, le x:Name
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 valeurs x:Name
qui existent dans la partie définie par XAML de 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 InitializeComponent
permet de référencer le graphique d’objet d’exécution à l’aide du nom de x:Name
/champ directement, au lieu d’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
action de génération, une propriété de référence distincte est créée lors de la compilation qui ajoute le mot clé WithEvents
à tous les éléments qui ont un x:Name
, pour prendre en charge Handles
syntaxe pour les délégués du 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 le x:Name
est potentiellement nécessaire pour la liaison 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 doivent pas être appliqués dans des situations qui utilisent également x:Key
. Le ResourceDictionary WPF a un comportement spécial de la définition en tant que portée de nom XAML, mais en retournant des valeurs Non implémentées ou Null pour INameScope API comme moyen d’appliquer ce comportement. Si l’analyseur XAML WPF rencontre Name
ou x:Name
dans un ResourceDictionarydéfini par XAML, le nom n’est ajouté à aucun namescope XAML. Toute tentative de recherche de ce nom à partir d’un namescope XAML et les méthodes FindName
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 propriété de dépendance Name
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 propriété Name
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 propriété Name
, 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 les chronologies et les transformations créées en XAML, si vous envisagez de les référencer à partir du code ultérieurement.
Si Name est disponible en tant que propriété sur la classe, Name et x:Name
peuvent être utilisés de manière interchangeable en tant qu’attributs, mais une exception d’analyse résulte si les deux sont spécifiées 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 pouvez être défini à l’aide de la syntaxe d’attribut XAML et dans le code à l’aide de SetValue; Notez toutefois que la définition de la propriété Name dans le 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 méthodes à partir du code, par rapport à la portée de nom appropriée.
Name pouvez également être défini à l’aide de la syntaxe de l’é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 de SetValue; 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 espace de noms XAML (x :) Language Features (Silverlight).
Voir aussi
- FrameworkElement.Name
- FrameworkContentElement.Name
- arborescences dans WPF
.NET Desktop feedback