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é. Cela peut être null si aucun objet correspondant n’a été trouvé dans le namescope XAML actuel.

Remarques

Important

Pour utiliser efficacement la méthode FindName, 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 Namescopes XAML.

L’utilisation la plus courante de FindName dans votre code Windows Runtime provient de l’appel InitializeComponent généré pour une page XAML. Dans ce cas, FindName est appelé uniquement après le chargement de la page XAML. InitializeComponent fournit l’infrastructure de telle 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 sous la forme d’une 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 dans la 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 à l’intérieur de cette arborescence d’objets. Le résultat est 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 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 des 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 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 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 peut-être entrer l’arborescence visuelle d’un modèle, en utilisant 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 à 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 ensuite FindName à 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 storyboard d’animation ne dérivent pas de FrameworkElement.

La propriété Name d’un objet (ou l’attribut x:Name similaire) est attribué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 Nom).

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 ou l’autre implémentation de FindName peuvent parcourir une arborescence d’objets d’éléments frameworkElement /texte mixte, et utiliser un namescope XAML commun afin qu’un appel FrameworkElement.FindName puisse trouver un élément de texte nommé, et vice versa.

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

S’applique à

Voir aussi