FrameworkElement.FindName(String) Metodo

Definizione

Recupera un oggetto con il nome dell'identificatore specificato.

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

Parametri

name
String

Platform::String

winrt::hstring

Nome dell'oggetto richiesto.

Restituisce

Object

Platform::Object

IInspectable

Oggetto richiesto. Ciò può essere null se non è stato trovato alcun oggetto corrispondente nell'ambito del nome XAML corrente.

Commenti

Importante

Per usare il metodo FindName in modo efficace, è necessario comprendere il concetto di un nome XAML e come viene creato un nome XAML in fase di caricamento XAML e quindi fatto riferimento e eventualmente modificato in fase di esecuzione. Per altre informazioni, vedere Nomi XAML.

L'utilizzo più comune di FindName nel codice Windows Runtime sarà compreso nell'interno della chiamata InitializeComponent generata per una pagina XAML. In questa situazione, FindName viene richiamato solo dopo il caricamento della pagina XAML. InitializeComponent fornisce l'infrastruttura in modo che qualsiasi oggetto creato da un'istanza del caricamento XAML possa essere accessibile facilmente dal codice code-behind. È quindi possibile fare riferimento agli oggetti come variabile che condivide lo stesso nome dell'attributo x:Name dichiarato dal markup.

Un'API di runtime, ad esempio FindName, funziona su un albero di oggetti run-time dell'app in quanto esiste in memoria. Quando parte di questo albero di oggetti viene creata da modelli o da xaml caricati in fase di esecuzione, un nome XAML non è in genere contiguo all'interno di tale albero di oggetti. Il risultato è che potrebbe essere presente un oggetto denominato nell'albero dell'oggetto che non è possibile trovare un determinato ambito FindName. Le interruzioni tra i nomi XAML che potrebbero verificarsi in scenari di applicazione tipici sono quando gli oggetti vengono creati applicando un modello o quando gli oggetti vengono creati da una chiamata a XamlReader.Load e successivamente aggiunti all'albero degli oggetti.

Se si restituisce un risultato Null imprevisto per FindName, provare queste tecniche:

  • Per gli oggetti denominati provenienti da un modello, se si definisce o deriva da un controllo, è possibile chiamare GetTemplateChild dall'ambito dell'oggetto in cui viene applicato il modello. È necessario trovarsi in un ambito di definizione di classe derivata per usare GetTemplateChild, perché è un metodo protetto di Control.
  • Se non si è in un ambito di definizione di classe derivata, è possibile immettere l'albero visivo di un modello usando VisualTreeHelper a un punto di durata dell'oggetto dopo l'applicazione del modello (gestire l'evento caricato ). VisualTreeHelper usa una metafora padre-figlio per camminare l'albero, anziché usare il concetto di nomescope XAML. Per camminare l'albero in genere è necessaria una conoscenza specifica della composizione del controllo in quanto proviene da un determinato modello. È possibile usare VisualTreeHelper.GetChild nel controllo per ottenere la radice del modello applicato del controllo e chiamare findName in modo specifico nella radice del modello per accedere agli elementi denominati all'interno del codice XAML del modello.
  • Per il caso XamlReader.Load , è necessario mantenere un riferimento al valore restituito della chiamata XamlReader.Load , ovvero un oggetto che diventerà il proprietario o la base del nome XAML creato pertinente. Chiamare quindi FindName da tale ambito.

L'oggetto restituito da FindName non è necessariamente un FrameworkElement. Ad esempio, è possibile applicare un nome a uno storyboard di animazione e i vari tipi di storyboard di animazione non derivano da FrameworkElement.

La proprietà Name per un oggetto (o l'attributo x:Name simile) viene assegnata specificando un attributo in un elemento oggetto nel markup XAML. È possibile impostare un valore Name dopo il caricamento del codice XAML di origine iniziale, ma questa tecnica presenta alcune limitazioni (vedere Osservazioni in Nome).

TextElement definisce un nome FindName simile. In questo modo viene abilitato un comportamento FindName nel modello a oggetti, che non è limitato a FrameworkElement. Le chiamate in base a un'implementazione di FindName possono attraversare in un albero di oggetti di elemento FrameworkElement/text misto e usare un nome xaml comune in modo che una chiamata FrameworkElement.FindName possa trovare un elemento di testo denominato e viceversa.

I valori dei nomi aggiunti o modificati in fase di esecuzione nell'albero degli oggetti verranno aggiornati nell'ambito del nome XAML operatore a tale livello nell'albero degli oggetti. In altre parole, se si crea un nuovo FrameworkElement, assegnarlo a Name, aggiungerlo all'albero degli oggetti, chiamando FindName dall'interno di tale nome XAML, può trovare e restituire l'oggetto creato dal codice.

Si applica a

Vedi anche