Compartir a través de


Atributo x:Name

Identifica de forma única los elementos de objeto para el acceso al objeto creado por instancias del código subyacente o el código general. Una vez aplicado a un modelo de programación de respaldo, x:Name se puede considerar equivalente a la variable que contiene una referencia de objeto, tal como devuelve un constructor.

Uso del atributo XAML

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

Valores de XAML

Término Descripción
XAMLNameValue Cadena que se ajusta a las restricciones de la gramática XamlName.

Gramática xamlName

A continuación se muestra la gramática normativa de una cadena que se usa como clave en esta implementación xaml:

XamlName ::= NameStartChar (NameChar)*
NameStartChar ::= LetterCharacter | '_'
NameChar ::= NameStartChar | DecimalDigit
LetterCharacter ::= ('a'-'z') | ('A'-'Z')
DecimalDigit ::= '0'-'9'
CombiningCharacter::= none
  • Los caracteres están restringidos al intervalo ASCII inferior y, más específicamente, a letras mayúsculas y minúsculas del alfabeto romano, dígitos y carácter de subrayado (_).
  • No se admite el intervalo de caracteres Unicode.
  • Un nombre no puede comenzar con un dígito. Algunas implementaciones de herramientas anteponen un carácter de subrayado (_) a una cadena si el usuario proporciona un dígito como carácter inicial o la herramienta genera automáticamente valores x:Name en función de otros valores que contienen dígitos.

Comentarios

El x:Name especificado se convierte en el nombre de un campo que se crea en el código subyacente cuando se procesa XAML y ese campo contiene una referencia al objeto . El proceso de creación de este campo se realiza mediante los pasos de destino de MSBuild, que también son responsables de unir las clases parciales de un archivo XAML y su código subyacente. Este comportamiento no es necesariamente el lenguaje XAML especificado; es la implementación concreta que Plataforma universal de Windows programación (UWP) para XAML se aplica para usar x:Name en sus modelos de programación y aplicación.

Cada x:Name definido debe ser único dentro de un ámbito de nombres XAML. Por lo general, un ámbito de nombres XAML se define en el nivel de elemento raíz de una página cargada y contiene todos los elementos de ese elemento en una sola página XAML. Los ámbitos de nombres XAML adicionales se definen mediante cualquier plantilla de control o plantilla de datos definida en esa página. En tiempo de ejecución, se crea otro ámbito de nombres XAML para la raíz del árbol de objetos que se crea a partir de una plantilla de control aplicada y también por árboles de objetos creados a partir de una llamada a XamlReader.Load. Para obtener más información, consulta Ámbitos de nombres XAML.

Las herramientas de diseño suelen generar automáticamente valores x:Name para los elementos cuando se introducen en la superficie de diseño. El esquema de autogeneración varía en función del diseñador que use, pero un esquema típico consiste en generar una cadena que comience con el nombre de clase que respalda el elemento, seguido de un entero avanzado. Por ejemplo, si introduces el primer elemento Button en el diseñador, es posible que veas que en el XAML este elemento tiene el valor del atributo x:Name de "Button1".

x:Name no se puede establecer en la sintaxis del elemento de propiedad XAML ni en el código mediante SetValue. x:Name solo se puede establecer mediante la sintaxis de atributo XAML en elementos.

Nota Específicamente para las aplicaciones de C++/CX, no se crea un campo de respaldo para una referencia x:Name para el elemento raíz de un archivo XAML o página. Si necesita hacer referencia al objeto raíz desde código subyacente de C++, use otras API o recorrido de árbol. Por ejemplo, puede llamar a FindName para un elemento secundario con nombre conocido y, a continuación, llamar a Parent.

x:Name y otras propiedades Name

Algunos tipos usados en XAML para UWP también tienen una propiedad denominada Name. Por ejemplo, FrameworkElement.Name y TextElement.Name.

Si Name está disponible como una propiedad settable en un elemento, Name y x:Name se pueden usar indistintamente en XAML, pero se produce un error si se especifican ambos atributos en el mismo elemento. También hay casos en los que hay una propiedad Name , pero es de solo lectura (como VisualState.Name). Si ese es el caso, siempre usas x:Name para asignar un nombre a ese elemento en XAML y el nombre de solo lectura existe para algún escenario de código menos común.

NotaFrameworkElement.Name generalmente no se debe usar como una manera de cambiar los valores establecidos originalmente por x:Name, aunque hay algunos escenarios que son excepciones a esa regla general. En escenarios típicos, la creación y definición de ámbitos de nombres XAML es una operación de procesador XAML. La modificación de FrameworkElement.Name en tiempo de ejecución puede dar lugar a una alineación incoherente del ámbito de nombres XAML o de campos privados, lo que es difícil de realizar un seguimiento en el código subyacente.

x:Name y x:Key

x:Name se puede aplicar como un atributo a los elementos de un ResourceDictionary para actuar como sustituto del atributo x:Key. (Es una regla que todos los elementos de un ResourceDictionary debe tener un atributo x:Key o x:Name). Esto es común para animaciones con guion gráfico. Para obtener más información, consulta la sección de referencias de recursos de ResourceDictionary y XAML.