FrameworkElement.Name Proprietà

Definizione

Ottiene o imposta il nome di identificazione dell'oggetto. Quando un processore XAML crea l'albero degli oggetti dal markup XAML, il codice di runtime può fare riferimento all'oggetto dichiarato da XAML con questo nome.

public:
 property Platform::String ^ Name { Platform::String ^ get(); void set(Platform::String ^ value); };
winrt::hstring Name();

void Name(winrt::hstring value);
public string Name { get; set; }
var string = frameworkElement.name;
frameworkElement.name = string;
Public Property Name As String
<frameworkElement Name="xamlNameString"/>

Valore della proprietà

String

Platform::String

winrt::hstring

Nome dell'oggetto, che deve essere una stringa valida nella grammatica XamlName (vedere la tabella in riferimento all'attributo x:Name ). Il valore predefinito è una stringa vuota.

Esempio

Questo esempio ottiene un valore per Name da un oggetto esistente e usa tale nome per ridestinare un'animazione. Per impostare come destinazione un'animazione, impostare la proprietà associata Storyboard.TargetName .

private void Start_Animation(object sender, PointerRoutedEventArgs e)
{

    // If the Storyboard is running and you try to change
    // properties of its animation objects programmatically, 
    // an error will occur.
    myStoryboard.Stop();

    // Get a reference to the rectangle that was clicked.
    Rectangle myRect = (Rectangle)sender;

    // Change the TargetName of the animation to the name of the
    // rectangle that was clicked.
    myDoubleAnimation.SetValue(Storyboard.TargetNameProperty, myRect.Name);

    // Begin the animation.
    myStoryboard.Begin();
}

Commenti

L'utilizzo più comune di questa proprietà consiste nel specificare l'attributo x:Name per un oggetto nel markup XAML o per leggere tale valore come è stato impostato nel markup. Nella maggior parte dei modi, l'attributo x:Name e la Name proprietà sono equivalenti. In qualsiasi singolo elemento, l'attributo x:Name e la Name proprietà si escludono a vicenda come attributi XAML. Se si tenta di impostare sia x:Name che Name sullo stesso elemento oggetto nel markup, viene generato un errore del parser.

Quando usi le azioni di compilazione page predefinite per XAML, qualsiasi elemento XAML con un attributo x:Name o Name genera riferimenti al campo che vengono eventualmente popolati da InitializeComponent quando viene caricato XAML. I riferimenti di campo abilitano un modello di programmazione in cui gli oggetti possono essere direttamente referenziati in base al nome nel code-behind specifico della pagina, dopo che l'albero degli oggetti XAML viene caricato in una pagina o in un'app.

I nomi devono essere univoci in un ambito dei nomi XAML. In genere, l'ambito dei nomi XAML è definito dalla pagina XAML, ma alcune funzionalità, ad esempio modelli o chiamate all'API, ad esempio XamlReader.Load , possono definire ambiti dei nomi XAML separati. Per altre info, vedi Ambiti dei nomi XAML.

Name non deve mai essere localizzato. Name viene usato come variabile del nome di campo nel code-behind. Questo codice è in genere inaccessibile al localizzatore che potrebbe altrimenti avere accesso ai file XAML che definiscono l'interfaccia utente, anche se ciò dipende dal modello di distribuzione e dalle procedure di localizzazione. Questo è un motivo per cui non dovresti visualizzare le stringhe provenienti da Name nell'interfaccia utente dell'app.

Scenari per nome

L'impostazione x:Name o Name nel codice XAML che definisce gli elementi dell'interfaccia utente supporta diversi scenari principali:

  • Selezione della destinazione dell'animazione Per applicare un'animazione a una proprietà dell'oggetto, è necessario specificare come destinazione un'istanza specifica. A tale scopo, impostare la proprietà associata Storyboard.TargetName in qualsiasi sequenza temporale. Il valore impostato qui è la stringa assegnata come x:Name o Name. Per altre info, vedi Animazioni con storyboard.
  • Parti di un modello di controllo Per supportare il modello di stato visivo e l'inizializzazione del controllo, gli autori di controlli devono specificare Name valori per le parti chiave di un controllo basato su modelli. Per altre info, vedi Modelli di controllo XAML.
  • Interazione generale in fase di esecuzione Ad esempio, il codice all'interno di un gestore eventi potrebbe gestire un evento in un oggetto che fornisce l'interfaccia utente delle modifiche, ma la modifica alle proprietà si verifica in un altro elemento dell'interfaccia utente nelle vicinanze. Il modo più semplice per scrivere codice per questa situazione consiste nell'usare il riferimento al campo generato da un oggetto Name.

Findname

Il metodo di utilità FindName, disponibile da qualsiasi FrameworkElement, può trovare oggetti in base al nome nell'albero degli oggetti purché si trovino nell'ambito dei nomi XAML corrente. FindName cerca l'intero albero di oggetti creato da XAML. Tecnicamente, ciò che FindName sta effettivamente cercando è l'ambito dei nomi XAML, che non mantiene la metafora dell'albero ed è invece rappresentato come una tabella hash di nomi. FindName non è possibile trovare nomi definiti nei modelli applicati. Per trovare elementi nei modelli applicati, usare VisualTreeHelper.GetChild per ottenere l'oggetto radice del modello applicato. È quindi possibile chiamare FindName su tale oggetto radice e si eseguirà una ricerca nell'ambito dei nomi XAML del modello anziché nella pagina maggiore.

Nome e data binding

Non è possibile usare il valore stringa di come valore di Name origine diretta per un'origine di data binding. Se devi visualizzare lo stesso valore stringa dell'interfaccia Name utente con l'associazione, devi replicare lo stesso valore nella proprietà Tag , che può essere usato come origine dell'associazione di proprietà. Non usare Name anche come destinazione di associazione.

Il valore di o Name è l'identificatore utilizzato per identificare l'elemento di x:Name origine per un'associazione ElementName. Per altre info, vedi Informazioni approfondite sul data binding.

Impostazione del nome nel codice

È possibile impostare il valore di Name per un oggetto in fase di esecuzione, ma esistono alcune importanti considerazioni e limitazioni da tenere presenti.

La modifica del valore di nel codice in fase di Name esecuzione se l'oggetto ha un valore precedente Name impostato in XAML non è in genere consigliato. Ciò è dovuto al fatto che l'impostazione di un nome dopo il caricamento dell'albero degli oggetti non creerà o modificherà il nome di identificazione del riferimento al campo equivalente. Se esiste già un riferimento a un campo perché x:Name viene fornito nel markup iniziale e si modifica il valore di Name, il campo e il nome che è necessario usare per trovare l'oggetto tramite FindName sono ora diversi perché il campo rimane come nome definito dal markup.

L'impostazione di un Name valore per un oggetto creato nel codice e pertanto non ha mai un valore Name definito da XAML è appropriato per determinati scenari. Uno di questi scenari è se vuoi essere in grado di trovare oggetti creati da XAML o creati dal codice nell'albero usando FindName come funzione di utilità comune. Per far funzionare questo scenario, il Windows Runtime continua a usare e aggiungere alla rappresentazione hashtable dell'ambito dei nomi XAML in fase di esecuzione. Se si sta tentando di aggiungere nuovi oggetti denominati a un albero di oggetti creato in gran parte da XAML esistente, i nomi devono essere univoci, altrimenti si verifica un'eccezione di nome duplicato. L'eccezione del nome duplicato potrebbe non verificarsi nel tentativo di impostare Name. Finché non si tenta di aggiungere l'oggetto duplicato all'albero degli oggetti principale, il nuovo oggetto ha un ambito dei nomi XAML autonomo. È solo nel momento in cui si connette l'oggetto a un albero di oggetti più grande che è possibile rilevare la condizione del nome duplicato. In alternativa, l'eccezione potrebbe verificarsi sull'operazione che ha connesso oggetti nell'albero, ad esempio su una chiamata al Add metodo di una raccolta che si connette all'albero degli oggetti principale.

Può essere difficile sapere a quali valori Name esistono già nell'ambito dei nomi XAML a cui si aggiungerà successivamente il nuovo oggetto. Non esiste un'API specifica che segnala la tabella hash completa dei nomi esistenti in un ambito dei nomi XAML. Se si impostano in modo esteso i valori name nel codice, potrebbe essere necessaria una tecnica per generare stringhe di nome univoche per l'utilizzo del runtime oppure potrebbe essere necessario eseguire il wrapping delle chiamate che aggiungono oggetti appena denominati in un blocco try-catch per intercettare le eccezioni che potrebbero derivare da un nome duplicato. In alternativa, puoi aggiungere codice personalizzato all'implementazione InitializeComponent che legge i valori dei nomi generati da XAML.

Si noti che è possibile impostare Name solo in fase di esecuzione per gli oggetti frameworkElement o Inline. Se un oggetto non dispone di una Name proprietà e l'impostazione del nome in XAML richiederebbe l'uso dell'attributo x:Name anziché Name, non è disponibile alcuna API di runtime per l'impostazione del nome di runtime di un oggetto di questo tipo.

Si applica a

Vedi anche