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é. 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.