FrameworkElement.FindName(String) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
Objet demandé. Cela peut être null si aucun objet correspondant n’a été trouvé dans le namescope XAML actuel.
Remarques
Important
Pour utiliser la FindName méthode efficacement, 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 les portées de noms XAML.
L’utilisation la plus courante de FindName votre code Windows Runtime provient de l’appel généré InitializeComponent pour une page XAML. Dans ce cas, FindName elle est appelée 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 sous la forme d’une variable qui partage le même nom que l’attribut x :Name déclaré par le balisage.
Une API d’exécution telle qu’elle 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 portées de noms XAML que vous pouvez rencontrer dans les scénarios d’application classiques sont le moment où les 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 ces techniques :
- Pour les objets nommés provenant d’un modèle, si vous définissez ou dérivez 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 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 point dans 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 marcher dans l’arborescence, plutôt que d’utiliser le concept de namescope XAML. La marche de l’arborescence 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
FindNamespécifiquement sur la racine du modèle pour accéder aux éléments nommés dans le code XAML du modèle. - 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 de la portée de noms XAML créée pertinente. Appelez
FindNameensuite à 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 pour un objet (ou l’attribut x :Name similaire) est affectée 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 du code XAML source initial, mais cette technique présente certaines limitations (voir Remarques dans Name).
TextElement définit un nom de recherche similaire. Cela permet un FindName comportement dans le modèle objet, qui n’est pas limité à FrameworkElement. Les appels par implémentation peuvent FindName traverser une arborescence d’objets d’élément FrameworkElement /text 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 ajoutées ou modifiées au moment de l’exécution dans l’arborescence d’objets sont mises à jour dans le namescope XAML agissant à ce niveau dans l’arborescence d’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 namescope XAML pour rechercher et renvoyer l’objet créé par le code.