Condividi tramite


Attributo x:Name

Identifica in modo univoco gli elementi dell'oggetto per accedere all'oggetto istanziato dal code-behind o da codice generale. Una volta applicato a un modello di programmazione di backup, x:Name può essere considerato equivalente alla variabile che contiene un riferimento a un oggetto, come restituito da un costruttore.

Utilizzo degli attributi XAML

<object x:Name="XAMLNameValue".../>

Valori XAML

Termine Description
XAMLNameValue Stringa conforme alle restrizioni della grammatica XamlName.

Grammatica XamlName

Di seguito è riportata la grammatica normativa per una stringa usata come chiave in questa implementazione XAML:

XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
  • I caratteri sono limitati all'intervallo ASCII inferiore e, in particolare, alle lettere maiuscole e minuscole dell'alfabeto romano, alle cifre e al carattere di sottolineatura (_).
  • L'intervallo di caratteri Unicode non è supportato.
  • Un nome non può iniziare con una cifra. Alcune implementazioni dello strumento anteponevano un carattere di sottolineatura (_) a una stringa se l'utente fornisce una cifra come carattere iniziale o lo strumento genera automaticamente valori x:Name in base ad altri valori che contengono cifre.

Osservazioni:

Il valore x:Name specificato diventa il nome di un campo creato nel codice sottostante durante l'elaborazione di XAML e tale campo contiene un riferimento all'oggetto. Il processo di creazione di questo campo viene eseguito dai passaggi di destinazione di MSBuild, che sono anche responsabili dell'unione delle classi parziali per un file XAML e del relativo code-behind. Questo comportamento non è necessariamente specificato nel linguaggio XAML; è la particolare implementazione applicata alla programmazione UWP (Universal Windows Platform) per XAML per l'uso di x:Name nei modelli di programmazione e applicazione.

Ogni x:Name definito deve essere univoco all'interno di un ambito dei nomi XAML. In genere, un ambito dei nomi XAML viene definito a livello di elemento radice di una pagina caricata e contiene tutti gli elementi in tale elemento in una singola pagina XAML. Gli ambiti dei nomi XAML aggiuntivi sono definiti da qualsiasi modello di controllo o modello di dati definito in tale pagina. In fase di esecuzione, viene creato un altro ambito dei nomi XAML per la radice dell'albero degli oggetti creato da un modello di controllo applicato e anche dagli alberi degli oggetti creati da una chiamata a XamlReader.Load. Per altre info, vedi Ambiti dei nomi XAML.

Gli strumenti di progettazione generano spesso automaticamente valori x:Name per gli elementi quando vengono introdotti nell'area di progettazione. Lo schema di generazione automatica varia a seconda della finestra di progettazione in uso, ma uno schema tipico consiste nel generare una stringa che inizia con il nome della classe che restituisce l'elemento, seguito da un intero in avanzamento. Ad esempio, se introduci il primo elemento Button nella finestra di progettazione, potresti notare che in XAML questo elemento ha il valore dell'attributo x:Name "Button1".

X:Name non può essere impostato nella sintassi dell'elemento di proprietà XAML o nel codice usando SetValue. X:Name può essere impostato solo usando la sintassi degli attributi XAML sugli elementi.

Annotazioni

In particolare per le app C++/CX, non viene creato un campo sottostante per un riferimento x:Name per l'elemento radice di un file o di una pagina XAML. Se è necessario fare riferimento all'oggetto radice dal code-behind di C++, utilizzare altre API o il traversal dell'albero. Ad esempio, è possibile chiamare FindName per un elemento figlio denominato noto e quindi chiamare Parent.

proprietà di tipo x:Name e altre proprietà Name

Alcuni tipi usati in XAML hanno anche una proprietà denominata Name. Ad esempio, FrameworkElement.Name e TextElement.Name.

Se Name è disponibile come proprietà impostabile in un elemento, Name e x:Name possono essere usati in modo intercambiabile in XAML, ma un errore restituisce un errore se entrambi gli attributi vengono specificati nello stesso elemento. Esistono anche casi in cui è presente una proprietà Name , ma è di sola lettura (ad esempio VisualState.Name). In tal caso, usi sempre x:Name per denominare l'elemento in XAML e il Nome di sola lettura esiste per alcuni scenari di codice meno comuni.

NotaFrameworkElement.Name in genere non deve essere usato come modo per modificare i valori originariamente impostati da x:Name, anche se esistono alcuni scenari che sono eccezioni a tale regola generale. Negli scenari tipici, la creazione e la definizione di ambiti dei nomi XAML è un'operazione del processore XAML. Modificare FrameworkElement.Name durante l'esecuzione può provocare un allineamento incoerente dei nomi nello XAML o nella denominazione dei campi privati, di cui è difficile tenere traccia nel code-behind.

x:Name e x:Key

X:Name può essere applicato come attributo agli elementi all'interno di un ResourceDictionary per fungere da sostituto dell'attributo x:Key. È una regola che tutti gli elementi di un oggetto ResourceDictionary devono avere un attributo x:Key o x:Name. Questo è comune per le animazioni con storyboard. Per altre info, vedi la sezione dei riferimenti alle risorse ResourceDictionary e XAML.