FrameworkElement.FindName(String) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Recupera um objeto que tem o nome do identificador especificado.
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
Parâmetros
- name
-
String
Platform::String
winrt::hstring
O nome do objeto solicitado.
Retornos
O objeto solicitado. Isso pode ser nulo se nenhum objeto correspondente foi encontrado no namescope XAML atual.
Comentários
Important
Para usar o FindName método efetivamente, você deve entender o conceito de um namescope XAML e como um namescope XAML é criado no tempo de carga XAML e, em seguida, referenciado e possivelmente modificado em tempo de execução. Para obter mais informações , consulte namescopes XAML.
O uso mais comum do FindName código Windows Runtime será de dentro da chamada gerada InitializeComponent para uma página XAML. Nessa situação, FindName é invocado somente depois que a página XAML é carregada.
InitializeComponent fornece a infraestrutura de modo que qualquer objeto instanciado pelo carregamento XAML possa ser convenientemente acessado pelo código code-behind. Em seguida, você pode referenciar os objetos como uma variável que compartilha o mesmo nome que o atributo x:Name declarado por marcação.
Uma API em tempo de execução, como FindName está funcionando em uma árvore de objetos em tempo de execução do aplicativo, como ela existe na memória. Quando parte dessa árvore de objetos é criada a partir de modelos ou XAML carregado em tempo de execução, um namescope XAML normalmente não é contíguo dentro dessa árvore de objetos. O resultado é que pode haver um objeto nomeado na árvore de objetos que um determinado FindName escopo não pode encontrar. As descontinuidades entre namescopes XAML que você pode encontrar em cenários típicos de aplicativo são quando objetos são criados aplicando um modelo ou quando objetos são criados por uma chamada para XamlReader.Load e, posteriormente, adicionados à árvore de objetos.
Se você retornar um resultado nulo inesperado, FindNameexperimente estas técnicas:
- Para objetos nomeados provenientes de um modelo, se você estiver definindo ou derivando de um controle, poderá chamar GetTemplateChild do escopo do objeto em que o modelo é aplicado. Você deve estar em um escopo de definição de classe derivada para usar GetTemplateChild, pois ele é um método protegido de Controle.
- Se você não estiver em um escopo de definição de classe derivada, poderá inserir a árvore visual de um modelo usando o VisualTreeHelper em um ponto do tempo de vida do objeto após a aplicação do modelo (manipular o evento Loaded ).
O VisualTreeHelper usa uma metáfora pai-filho para andar na árvore, em vez de usar o conceito de namescope XAML. Andar na árvore geralmente requer um conhecimento específico da composição do controle, pois ela vem de um determinado modelo. Você pode usar VisualTreeHelper.GetChild no controle para obter a raiz de modelo aplicada do controle e chamar
FindNameespecificamente na raiz do modelo para acessar elementos nomeados dentro do modelo XAML. - Para o caso XamlReader.Load , você deve preservar uma referência ao valor retornado da chamada XamlReader.Load , que é um objeto que se tornará o proprietário ou base do namescope XAML criado relevante. Em seguida, chame
FindNamedesse escopo.
O objeto retornado por FindName não é necessariamente um FrameworkElement. Por exemplo, você pode aplicar um nome a um storyboard de animação e os vários tipos de storyboard de animação não derivam do FrameworkElement.
A propriedade Name para um objeto (ou o atributo x:Name semelhante) é atribuída especificando um atributo em um elemento de objeto na marcação XAML. Você pode definir um valor name depois que o XAML de origem inicial for carregado, mas essa técnica tem algumas limitações (consulte Comentários no Nome).
TextElement define um FindName semelhante. Isso habilita um FindName comportamento no modelo de objeto, que não se limita ao FrameworkElement. Chamadas por qualquer implementação podem atravessar para uma árvore de FindName objeto de elemento frameworkelement /texto misturada e usar um namescope XAML comum para que uma FrameworkElement.FindName chamada possa encontrar um elemento de texto nomeado e vice-versa.
Os valores de nome adicionados ou alterados no tempo de execução na árvore de objetos serão atualizados para o namescope XAML em ação nesse nível na árvore de objetos. Em outras palavras, se você criar um novo FrameworkElement, dê-lhe um Nome e, em seguida, adicione-o à árvore de objetos, chamando FindName de dentro desse namescope XAML pode encontrar e retornar o objeto criado por código.