FrameworkElement.FindName(String) Méthode

Définition

Récupère un objet qui a le nom d’identificateur spécifié.

public:
 virtual Platform::Object ^ FindName(Platform::String ^ name) = FindName;
IInspectable FindName(winrt::hstring const& name);
public object FindName(string name);
function findName(name)
Public Function FindName (name As String) As Object

Paramètres

name
String

Platform::String

winrt::hstring

Nom de l’objet demandé.

Retours

Object

Platform::Object

IInspectable

Objet demandé. Cette valeur peut être null si aucun objet correspondant n’a été trouvé dans l’étendue de nom XAML actuelle.

Remarques

Important

Pour utiliser efficacement la FindName méthode, vous devez comprendre le concept d’un namescope XAML et la façon dont un namescope XAML est créé au moment du chargement XAML, puis référencé et éventuellement modifié au moment de l’exécution. Pour plus d’informations, consultez Étendues de noms XAML.

L’utilisation la plus courante de FindName dans votre code de Windows Runtime provient de l’appel généré InitializeComponent pour une page XAML. Dans ce cas, FindName est appelé uniquement après le chargement de la page XAML. InitializeComponent fournit l’infrastructure de sorte que tout objet instancié par le chargement XAML soit facilement accessible par votre code code-behind. Vous pouvez ensuite référencer les objets en tant que variable qui partage le même nom que l’attribut x:Name déclaré par balisage.

Une API d’exécution telle que FindName fonctionne sur une arborescence d’objets d’exécution de l’application telle qu’elle existe en mémoire. Lorsqu’une partie de cette arborescence d’objets est créée à partir de modèles ou de XAML chargé au moment de l’exécution, un namescope XAML n’est généralement pas contigu dans cette arborescence d’objets. Le résultat est qu’il peut y avoir un objet nommé dans l’arborescence d’objets qu’une étendue donnée FindName ne peut pas trouver. Les discontinuités entre les namescopes XAML que vous pouvez rencontrer dans les scénarios d’application classiques sont lorsque des objets sont créés en appliquant un modèle, ou lorsque les objets sont créés par un appel à XamlReader.Load et ajoutés par la suite à l’arborescence d’objets.

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

  • Pour les objets nommés qui proviennent d’un modèle, si vous définissez ou dérivez à partir d’un contrôle, vous pouvez appeler GetTemplateChild à partir de l’étendue de l’objet où le modèle est appliqué. Vous devez être dans une étendue de définition de classe dérivée pour pouvoir utiliser GetTemplateChild, car il s’agit d’une méthode protégée de Control.
  • Si vous n’êtes pas dans une étendue de définition de classe dérivée, vous pouvez entrer l’arborescence visuelle d’un modèle à l’aide de VisualTreeHelper à un moment de la durée de vie de l’objet après l’application du modèle (gérer l’événement Loaded ). VisualTreeHelper utilise une métaphore parent-enfant pour parcourir l’arborescence, plutôt que d’utiliser le concept de namescope XAML. La marche de l’arbre nécessite généralement une connaissance spécifique de la composition du contrôle, car elle 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 le cas XamlReader.Load , vous devez conserver une référence à la valeur de retour de l’appel XamlReader.Load , qui est un objet qui deviendra le propriétaire ou la base du namescope XAML créé qui est pertinent. Appelez FindName ensuite à partir de cette étendue à la place.

L’objet retourné par FindName n’est pas nécessairement un FrameworkElement. Par exemple, vous pouvez appliquer un nom à un storyboard d’animation, et les différents types de table de montage séquentiel d’animation ne dérivent pas de FrameworkElement.

La propriété Name pour un objet (ou l’attribut x:Name similaire) est affectée en spécifiant un attribut sur un élément objet dans le balisage XAML. Vous pouvez définir une valeur Name après le chargement du code XAML source initial, mais cette technique présente certaines limitations (voir Remarques dans Le nom).

TextElement définit un FindName similaire. Cela permet un FindName comportement dans le modèle objet, qui n’est pas limité à FrameworkElement. Les appels par l’une ou l’autre implémentation de FindName peuvent parcourir une arborescence d’objets d’élément de texte/FrameworkElement mixte et utiliser un namescope XAML commun afin qu’un FrameworkElement.FindName appel puisse trouver un élément de texte nommé, et vice versa.

Les valeurs de nom qui sont ajoutées ou modifiées au moment de l’exécution dans l’arborescence d’objets sont mises à jour dans l’étendue de nom XAML agissant à ce niveau dans l’arborescence d’objets. En d’autres termes, si vous créez un objet FrameworkElement, attribuez-lui un Nom, puis ajoutez-le à l’arborescence d’objets, en appelant FindName à partir de cette étendue de nom XAML pour rechercher et retourner l’objet créé par le code.

S’applique à

Voir aussi