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. Può essere Null se non è stato trovato alcun oggetto corrispondente nell'ambito dei nomi XAML corrente.

Commenti

Importante

Per usare il FindName metodo in modo efficace, è necessario comprendere il concetto di ambito dei nomi XAML e il modo in cui viene creato un ambito dei nomi XAML in fase di caricamento XAML, a cui viene fatto riferimento e eventualmente modificato in fase di esecuzione. Per altre info, vedi Ambiti dei nomi XAML.

L'uso più comune di FindName nel codice Windows Runtime sarà compreso nella chiamata generata InitializeComponent per una pagina XAML. In questo caso, FindName viene richiamato solo dopo il caricamento della pagina XAML. InitializeComponent fornisce l'infrastruttura in modo che qualsiasi oggetto di cui è stata creata un'istanza tramite il caricamento XAML possa accedere comodamente tramite il 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, FindName ad esempio, funziona su un albero di oggetti in fase di esecuzione dell'app perché esiste in memoria. Quando una parte di questo albero di oggetti viene creata da modelli o xaml caricati in fase di esecuzione, un ambito dei nomi XAML in genere non è contiguo all'interno di tale albero di oggetti. Il risultato è che potrebbe essere presente un oggetto denominato nell'albero degli oggetti che un determinato FindName ambito non è in grado di trovare. Le discontinuità tra ambiti dei nomi XAML che possono 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 si 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 in un punto della durata dell'oggetto dopo l'applicazione del modello (gestire l'evento Loaded ). VisualTreeHelper usa una metafora padre-figlio per l'esplorazione dell'albero, invece di usare il concetto di ambito dei nomi XAML. Il passaggio dell'albero richiede in genere una conoscenza specifica della composizione del controllo in quanto proviene da un determinato modello. Puoi usare VisualTreeHelper.GetChild sul controllo per ottenere la radice del modello applicata del controllo e chiamare FindName in modo specifico sulla radice del modello per accedere agli elementi denominati all'interno del codice XAML del modello.
  • Per il caso XamlReader.Load , devi mantenere un riferimento al valore restituito della chiamata XamlReader.Load , ovvero un oggetto che diventerà il proprietario o la base dell'ambito dei nomi XAML creato pertinente. Chiamare FindName quindi 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 su un elemento oggetto nel markup XAML. Puoi impostare un valore Name dopo il caricamento del codice XAML di origine iniziale, ma questa tecnica presenta alcune limitazioni (vedi La sezione Osservazioni in Nome).

TextElement definisce un findName simile. Ciò consente un FindName comportamento nel modello a oggetti, che non è limitato a FrameworkElement. Le chiamate da entrambe le implementazioni di FindName possono attraversare in un albero di oggetti elemento FrameworkElement /text misto e usare un ambito dei nomi XAML comune in modo che una FrameworkElement.FindName chiamata 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 dei nomi XAML a quel livello nell'albero degli oggetti. In altre parole, se crei un nuovo FrameworkElement, assegnalo a Name, quindi aggiungilo all'albero degli oggetti, chiamando FindName da tale ambito dei nomi XAML è possibile trovare e restituire l'oggetto creato dal codice.

Si applica a

Vedi anche