Attributo x:Namex:Name attribute

Identifica in modo univoco gli elementi oggetto per l’accesso all’oggetto di cui è stata creata un’istanza da code-behind o codice generale.Uniquely identifies object elements for access to the instantiated object from code-behind or general code. Se applicato a un modello di programmazione di supporto, l’attributo x:Name può essere considerato equivalente alla variabile che contiene un riferimento a un oggetto, come restituito da un costruttore.Once applied to a backing programming model, x:Name can be considered equivalent to the variable holding an object reference, as returned by a constructor.

Sintassi degli attributi XAMLXAML attribute usage

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

Valori XAMLXAML values

TermineTerm DescrizioneDescription
XAMLNameValueXAMLNameValue Stinga conforme alle limitazioni della grammatica di XamlName.A string that conforms to the restrictions of the XamlName grammar.

Grammatica di XamlNameXamlName grammar

Di seguito è riportata la grammatica normativa per una stringa usata come chiave in questa implementazione XAML:The following is the normative grammar for a string that is used as a key in this XAML implementation:

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, più specificamente, alle lettere maiuscole e minuscole, alle cifre e al carattere di sottolineatura ( _ ).Characters are restricted to the lower ASCII range, and more specifically to Roman alphabet uppercase and lowercase letters, digits, and the underscore (_) character.
  • L'intervallo di caratteri Unicode non è supportato.The Unicode character range is not supported.
  • Il nome non può iniziare con una cifra.A name cannot begin with a digit. Alcune implementazioni di strumenti prevedono un carattere di sottolineatura ( _ ) in una stringa se l'utente fornisce una cifra come carattere iniziale oppure lo strumento genera automaticamente valori x:Name in base ad altri valori che contengono cifre.Some tool implementations prepend an underscore (_) to a string if the user supplies a digit as the initial character, or the tool autogenerates x:Name values based on other values that contain digits.

CommentiRemarks

L’oggetto x:Name specificato diventa il nome di un campo creato nel codice sottostante quando XAML viene elaborato e tale campo contiene un riferimento all’oggetto.The specified x:Name becomes the name of a field that is created in the underlying code when XAML is processed, and that field holds a reference to the object. Il processo di creazione di questo campo viene eseguito dai passaggi della destinazione MSBuild, che sono anche responsabili dell'unione delle classi parziali per un file XAML e il relativo code-behind.The process of creating this field is performed by the MSBuild target steps, which also are responsible for joining the partial classes for a XAML file and its code-behind. Questo comportamento non è necessariamente specifico del linguaggio XAML, ma costituisce la particolare implementazione che la programmazione della piattaforma UWP (Universal Windows Platform) per XAML applica per usare x:Name nei modelli di programmazione e di applicazione.This behavior is not necessarily XAML-language specified; it is the particular implementation that Universal Windows Platform (UWP) programming for XAML applies to use x:Name in its programming and application models.

Ogni oggetto x:Name definito deve essere univoco all’interno di un ambito dei nomi XAML.Each defined x:Name must be unique within a XAML namescope. Generalmente, un ambito dei nomi XAML viene definito come il livello dell'elemento radice di una pagina caricata e contiene tutti gli elementi situati sotto quest'ultimo in una singola pagina XAML.Generally, a XAML namescope is defined at the root element level of a loaded page and contains all elements under that element in a single XAML page. Altri ambiti dei nomi XAML possono essere definiti dagli eventuali modelli di controlli o di dati specificati nella pagina.Additional XAML namescopes are defined by any control template or data template that is defined on that page. In fase di esecuzione viene creato un altro NameScope XAML per la radice della struttura ad albero di oggetti creata da un modello di controllo applicato e anche dagli alberi degli oggetti creati da una chiamata a XamlReader. Load.At run time, another XAML namescope is created for the root of the object tree that is created from an applied control template, and also by object trees created from a call to XamlReader.Load. Per altre info, vedi Ambiti dei nomi XAML.For more info, see XAML namescopes.

Quando vengono introdotti nell’area di progettazione, gli strumenti di progettazione spesso generano automaticamente valori x:Name per gli elementi.Design tools often autogenerate x:Name values for elements when they are introduced to the design surface. Lo schema di generazione automatica varia in base alla finestra di progettazione in uso, ma lo schema tipico consiste nel generare una stringa che inizia con il nome della classe che supporta l'elemento, seguito da un numero intero progressivo.The autogeneration scheme varies depending on which designer you are using, but a typical scheme is to generate a string that starts with the class name that backs the element, followed by an advancing integer. Se ad esempio introduci il primo elemento Button nella finestra di progettazione, il valore dell’attributo x:Name di questo elemento nel codice XAML potrebbe essere "Button1".For example, if you introduce the first Button element to the designer, you might see that in the XAML this element has the x:Name attribute value of "Button1".

x:Name non può essere impostato nella sintassi degli elementi di proprietà XAML o nel codice tramite SetValue.x:Name cannot be set in XAML property element syntax, or in code using SetValue. x:Name può essere impostato solo con la sintassi degli attributi XAML negli elementi.x:Name can only be set using XAML attribute syntax on elements.

Nota    In particolare per le app C++/CX, un campo sottostante per un riferimento x:Name non viene creato per l'elemento radice di un file o di una pagina XAML.Note  Specifically for C++/CX apps, a backing field for an x:Name reference is not created for the root element of a XAML file or page. Se ti serve un riferimento all'oggetto radice dal code-behind C++, usa altre API o l'attraversamento dell'albero.If you need to reference the root object from C++ code-behind, use other APIs or tree traversal. Ad esempio, puoi chiamare FindName per un elemento figlio denominato conosciuto e quindi chiamare Parent.For example you can call FindName for a known named child element and then call Parent.

x:Name e altre proprietà Namex:Name and other Name properties

Alcuni tipi usati nell’implementazione XAML della piattaforma UWP includono anche una proprietà denominata Name.Some types used in UWP XAML also have a property named Name. Ad esempio, FrameworkElement.Name e TextElement.Name.For example, FrameworkElement.Name and TextElement.Name.

Se Name è disponile come proprietà impostabile di un elemento, Name e x:Name possono essere usati in modo intercambiabile in XAML, ma se vengono specificati entrambi gli attributi sullo stesso elemento, verrà restituito un errore.If Name is available as a settable property on an element, Name and x:Name can be used interchangeably in XAML, but an error results if both attributes are specified on the same element. A volte è disponibile anche una proprietà Name, ma è di sola lettura (ad esempio VisualState.Name).There are also cases where there's a Name property but it's read-only (like VisualState.Name). In questo caso, devi sempre usare x:Name per fare riferimento all’elemento nel codice XAML, mentre la proprietà Name di sola lettura viene fornita per alcuni scenari di programmazione meno comuni.If that's the case you always use x:Name to name that element in the XAML and the read-only Name exists for some less-common code scenario.

Nota Di solito non è consigliabile usare   FrameworkElement.Name per modificare i valori impostati originariamente da x:Name, ma esistono scenari che costituiscono un’eccezione a questa regola generale.Note  FrameworkElement.Name generally should not be used as a way to change values originally set by x:Name, although there are some scenarios that are exceptions to that general rule. Negli scenari tipici la creazione e la definizione di ambiti dei nomi XAML sono operazioni del processore XAML.In typical scenarios, the creation and definition of XAML namescopes is a XAML processor operation. La modifica di FrameworkElement.Name in fase di esecuzione può determinare incoerenze nell’ambito dei nomi XAML o nell’allineamento dei nomi dei campi privati, difficili da tenere sotto controllo nel code-behind.Modifying FrameworkElement.Name at run time can result in an inconsistent XAML namescope / private field naming alignment, which is hard to keep track of in your code-behind.

x:Name e x:Keyx:Name and x:Key

La proprietà x:Name può essere applicata come attributo agli elementi di un oggetto ResourceDictionary, in sostituzione dell'attributo x:Key.x:Name can be applied as an attribute to elements within a ResourceDictionary to act as a substitute for the x:Key attribute. Di regola, tutti gli elementi di un oggetto ResourceDictionary devono avere un attributox:Key o x:Name. Questa situazione è comune per le animazioni con storyboard.(It's a rule that all elements in a ResourceDictionary must have an x:Key or x:Name attribute.) This is common for Storyboarded animations. Per altre info, vedi la sezione in Riferimenti a ResourceDictionary e risorse XAML.For more info, see section of ResourceDictionary and XAML resource references.