FrameworkElement.FindName Method

Récupère un objet qui porte le nom d'identificateur spécifié.

Syntaxe


public object FindName(
  string name
)

Paramètres

name

Type: System.String [.NET] | Platform::String [C++]

Nom de l'objet demandé.

Valeur de retour

Type: System.Object [.NET] | Platform::Object [C++]

Objet demandé. Cette valeur peut être null si aucun objet correspondant n'a été trouvé dans la portée de nom XAML actuelle.

Remarques

Important  Pour utiliser efficacement la méthode FindName, vous devez comprendre le concept d'une portée de nom XAML, mais aussi comment une portée de nom XAML est créée au moment du chargement XAML, puis référencée et éventuellement modifiée au moment de l'exécution. Pour plus d'informations, consultez la section Espaces de noms XAML.

L'utilisation la plus courante de FindName dans votre code Windows Runtime sera l'utilisation à partir de l'appel InitializeComponent généré pour une page XAML. Dans ce cas, FindName est appelé uniquement après le chargement d'une page XAML. InitializeComponent fournit l'infrastructure permettant à un objet instancié par le chargement XAML d'être facilement accessible par votre code code-behind. Vous pouvez ensuite référencer les objets comme variable qui partage le même nom que x:Namedéclaré par balisage.

Une API d'exécution telle que FindName s'exécute sur une arborescence d'objets au moment de l'exécution de l'application telle qu'elle existe dans la mémoire. Lorsqu'une partie de cette arborescence d'objets est créée à partir de modèles ou de code XAML chargé au moment de l'exécution, une portée de nom XAML n'est pas en général contiguë dans cette arborescence d'objets. Il en résulte qu'il peut y avoir un objet nommé dans l'arborescence d'objets qu'une étendue FindName donnée ne peut pas trouver. Les discontinuités entre les portées de nom XAML que vous pouvez rencontrer dans les scénarios d'application standard existent lorsque des objets sont créés en appliquant un modèle, ou lorsque des objets sont créés par un appel à XamlReader.Load puis ajoutés à l'arborescence d'objets.

Si vous retournez un résultat null inattendu pour FindName, essayez les techniques suivantes :

  • Pour les objets nommés qui sont fournis avec un modèle, si vous définissez ou dérivez à partir d'un contrôle, appelez GetTemplateChild de la portée de l'objet dans laquelle le modèle est appliqué. Vous devez être dans une portée de définition de classe dérivée pour utiliser GetTemplateChild, parce que c'est une méthode de Control protégée.
  • Si vous n'êtes pas dans une portée de définition de classe dérivée, vous pouvez accéder à l'arborescence d'éléments visuels d'un modèle en utilisant VisualTreeHelper à un point précis dans la durée de vie de l'objet après l'application du modèle (gérez l'événement Loaded). VisualTreeHelper utilise une métaphore parent-enfant pour parcourir l'arborescence, plutôt que le concept de portée de nom XAML. Parcourir l'arborescence requiert en général des connaissances spécifiques sur la composition du contrôle car il provient d'un modèle donné. Vous pouvez utiliser VisualTreeHelper.GetChild sur le contrôle pour obtenir la racine du modèle appliqué du contrôle et appeler FindName spécifiquement sur la racine du modèle pour accéder aux éléments nommés dans le modèle XAML.
  • Pour XamlReader.Load, vous devez conserver une référence à la valeur de retour de l'appel de XamlReader.Load, qui est un objet qui devient le propriétaire ou la base de la portée de nom XAML créée pertinente. Puis appelez plutôt FindName à partir de cette portée.

L'objet retourné par FindName n'est pas nécessairement un FrameworkElement. Par exemple, vous pouvez appliquer un nom à un plan conceptuel d'animation, et les différents types de plans conceptuels d'animation ne dérivent pas de FrameworkElement.

La propriété Name d'un objet (ou l'attribut x:Name similaire) est assigné en spécifiant un attribut sur un élément d'objet dans le balisage XAML. Vous pouvez définir une valeur Name après le chargement de la source initiale XAML, mais cette technique présente toutefois quelques limitations (consultez la section Notes dans Name).

TextElement définit un FindName similaire. Cela active un comportement FindName dans le modèle objet, qui n'est pas limité à FrameworkElement. Les appels par l'une des implémentations de FindName peuvent parcourir une arborescence mixte d'objets éléments de texte / FrameworkElement et utiliser une portée de nom XAML courante de sorte qu'un appel à FrameworkElement.FindName puisse rechercher un élément de texte nommé, et inversement.

Les valeurs Name ajoutées ou modifiées au moment de l'exécution dans l'arborescence d'objets sont mises à jour dans la portée de nom XAML active à ce niveau de l'arborescence d'objets. En d'autres termes, si vous créez un objet FrameworkElement, donnez-lui un Name, puis ajoutez-le à l'arborescence des objets. L'appel de FindName à partir de cette portée de nom XAML peut rechercher et retourner l'objet créé par code.

Configuration requise

Client minimal pris en charge

Windows 8

Serveur minimal pris en charge

Windows Server 2012

Espace de noms

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Métadonnées

Windows.winmd

Voir aussi

FrameworkElement
Name
XAML, portées de nom
x:Name

 

 

Afficher:
© 2014 Microsoft