Langage

FrameworkElement.Name Propriété

Définition

Obtient ou définit le nom d’identification de l’objet. Lorsqu’un processeur XAML crée l’arborescence d’objets à partir du balisage XAML, le code d’exécution peut faire référence à l’objet déclaré PAR XAML par ce nom.

public:
 property Platform::String ^ Name { Platform::String ^ get(); void set(Platform::String ^ value); };
winrt::hstring Name();

void Name(winrt::hstring value);
public string Name { get; set; }
var string = frameworkElement.name;
frameworkElement.name = string;
Public Property Name As String
<frameworkElement Name="xamlNameString"/>

Valeur de propriété

String

Platform::String

winrt::hstring

Nom de l’objet, qui doit être une chaîne valide dans la grammaire XamlName (voir la table dans la référence d’attribut x :Name ). La valeur par défaut est une chaîne vide.

Exemples

Cet exemple obtient une valeur pour Name un objet existant et utilise ce nom pour recibler une animation. Vous ciblez une animation en définissant la propriété jointe Storyboard.TargetName .

private void Start_Animation(object sender, PointerRoutedEventArgs e)
{

    // If the Storyboard is running and you try to change
    // properties of its animation objects programmatically, 
    // an error will occur.
    myStoryboard.Stop();

    // Get a reference to the rectangle that was clicked.
    Rectangle myRect = (Rectangle)sender;

    // Change the TargetName of the animation to the name of the
    // rectangle that was clicked.
    myDoubleAnimation.SetValue(Storyboard.TargetNameProperty, myRect.Name);

    // Begin the animation.
    myStoryboard.Begin();
}

Remarques

L’utilisation la plus courante de cette propriété consiste à spécifier l’attribut x :Name d’un objet dans le balisage XAML ou à lire cette valeur telle qu’elle a été définie dans le balisage. Dans la plupart des cas, l’attribut x:Name et la Name propriété sont équivalents. Sur un seul élément, l’attribut x:Name et la Name propriété s’excluent mutuellement en tant qu’attributs XAML. Si vous tentez de définir à la fois x:Name et Name sur le même élément objet dans le balisage, une erreur d’analyseur est levée.

Lorsque vous utilisez les actions de génération de page par défaut pour XAML, tout élément XAML qui a un attribut x :Name ou Name génère des références de champ qui sont finalement remplies InitializeComponent lorsque le code XAML est chargé. Les références de champ activent un modèle de programmation dans lequel les objets peuvent être directement référencés par nom dans votre code-behind spécifique à la page, une fois l’arborescence d’objets XAML chargée dans une page ou une application.

Les noms doivent être uniques dans un namescope XAML. En règle générale, le namescope XAML est défini par la page XAML, mais certaines fonctionnalités telles que des modèles ou des appels à l’API tels que XamlReader.Load peuvent définir des portées de noms XAML distinctes. Pour plus d'informations, consultez les espaces de noms XAML.

Name ne doit jamais être localisé. Name est utilisé comme variable de nom de champ dans code-behind. Ce code est généralement inaccessible au localiseur qui peut autrement avoir accès aux fichiers XAML qui définissent l’interface utilisateur, bien que cela dépend de votre modèle de déploiement et de vos procédures de localisation. C’est une raison pour laquelle vous ne devez pas afficher de chaînes provenant du nom dans l’interface utilisateur de votre application.

Scénarios de nom

La définition x:Name ou Name dans le code XAML qui définit des éléments d’interface utilisateur prend en charge plusieurs scénarios majeurs :

  • Ciblage d’animation Pour appliquer une animation à une propriété d’objet, vous devez cibler une instance spécifique. Pour ce faire, définissez la propriété jointe Storyboard.TargetName sur n’importe quelle chronologie. La valeur que vous définissez ici est la chaîne que vous avez affectée en tant que ou x:NameName. Pour plus d’informations, consultez animations scénarisées.
  • Parties d’un modèle de contrôle Pour prendre en charge le modèle d’état visuel et l’initialisation du contrôle, les auteurs de contrôles doivent spécifier des Name valeurs pour les parties clés d’un contrôle modélisé. Pour plus d’informations, consultez les modèles de contrôle XAML.
  • Interaction de temps d’exécution générale Par exemple, le code au sein d’un gestionnaire d’événements peut gérer un événement sur un objet qui fournit l’interface utilisateur de modification, mais la modification des propriétés se produit sur un autre élément d’interface utilisateur proche. Le moyen le plus simple d’écrire du code pour cette situation consiste à utiliser la référence de champ générée à partir d’un Name.

FindName

La méthode utilitaire FindName, disponible à partir de n’importe quel FrameworkElement, peut rechercher des objets par nom dans l’arborescence d’objets tant qu’ils se trouvent dans le namescope XAML actuel. FindName recherche l’arborescence d’objets créée par XAML dans son intégralité. Techniquement, ce qui FindName est en fait la recherche est le namescope XAML, qui ne conserve pas la métaphore de l’arborescence et est plutôt représenté comme une table de hachage de noms. FindName impossible de trouver les noms définis dans les modèles appliqués. Pour rechercher des éléments dans des modèles appliqués, utilisez VisualTreeHelper.GetChild pour obtenir l’objet racine du modèle appliqué. Ensuite, vous pouvez appeler FindName cet objet racine, et vous allez rechercher le nomscope XAML du modèle plutôt que la page supérieure.

Liaison de noms et de données

Vous ne pouvez pas utiliser la valeur de chaîne comme valeur source directe pour une source de Name liaison de données. Si vous devez afficher la même valeur de chaîne que Name dans l’interface utilisateur avec la liaison, vous devez répliquer la même valeur dans la propriété Tag , qui peut être utilisée comme source de liaison de propriété. N’utilisez Name pas non plus comme cible de liaison.

La valeur ou Name est l’identificateur x:Name que vous utilisez pour identifier l’élément source d’une liaison ElementName. Pour plus d’informations, consultez la liaison de données en profondeur.

Définition du nom dans le code

Vous pouvez définir la valeur d’un objet au moment de Name l’exécution, mais certaines considérations et limitations importantes doivent être prises en compte.

La modification de la valeur du code au moment de Name l’exécution si l’objet avait une valeur précédente Name définie en XAML n’est généralement pas recommandé. Cela est dû au fait que la définition d’un nom après le chargement de l’arborescence d’objets ne crée pas ou ne modifie pas le nom d’identification de la référence de champ équivalente. Si une référence de champ existe déjà, car x:Name elle est fournie dans le balisage initial et que vous modifiez la valeur Name, le champ et le nom que vous devez utiliser pour rechercher l’objet via FindName sont désormais différents, car le champ reste en tant que nom défini par le balisage.

La définition d’une Name valeur pour un objet créé dans le code et, par conséquent, n’a jamais eu de valeur name définie par XAML est appropriée pour certains scénarios. L’un de ces scénarios est que vous souhaitez trouver des objets créés par XAML ou créés par du code dans l’arborescence à l’aide de FindName comme fonction utilitaire commune. Pour que ce scénario fonctionne, le Windows Runtime continue d’utiliser et d’ajouter à la représentation de hachage de la portée de noms XAML au moment de l’exécution. Si vous tentez d’ajouter de nouveaux objets nommés à une arborescence d’objets créée en grande partie par XAML, les noms doivent être uniques, sinon une exception de nom en double se produit. L’exception de nom en double peut ne pas se produire lors de la tentative de définition Name. Tant que vous n’avez pas tenté d’ajouter l’objet nommé en double à l’arborescence d’objets principale, le nouvel objet a sa propre portée de nom XAML autonome. Il n’est qu’au moment où vous connectez l’objet à une arborescence d’objets plus grande que la condition de nom dupliquée peut être détectée. Ou bien, l’exception peut se produire sur l’opération qui a connecté des objets dans l’arborescence, par exemple sur un appel à la Add méthode d’une collection qui se connecte à l’arborescence d’objets principal.

Il peut être difficile de savoir quelles valeurs Name existent déjà dans le namescope XAML auquel vous ajouterez ultérieurement le nouvel objet. Il n’existe aucune API spécifique qui signale la table de hachage complète des noms existants dans un namescope XAML. Si vous définissez des valeurs Name dans le code de manière étendue, vous devrez peut-être utiliser une technique pour générer des chaînes de noms uniques à votre utilisation de l’exécution, ou vous devrez peut-être inclure des appels qui ajoutent des objets nouvellement nommés dans un bloc try-catch pour intercepter les exceptions susceptibles de résulter d’un nom en double. Vous pouvez également ajouter votre propre code à l’implémentation InitializeComponent qui lit les valeurs de nom générées par XAML.

Notez que vous ne pouvez définir Name qu’au moment de l’exécution pour les objets qui sont un FrameworkElement ou un inline. Si un objet n’a pas de Name propriété et si le nom en XAML est requis à l’aide de l’attribut x:Name plutôt que Name, il n’existe aucune API d’exécution disponible pour définir le nom d’exécution d’un tel objet.

S’applique à

Voir aussi