Compartir a través de


Atributo x:Name

Identifica de forma única los elementos de objetos para el acceso al objeto instanciado desde el 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 de atributos XAML

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

Valores XAML

Término Description
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.

Observaciones

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 está necesariamente especificado por el lenguaje XAML; es la implementación concreta que la programación de la Plataforma universal de Windows (UWP) para XAML aplica al 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 el código subyacente en C++, use otras API disponibles o realice un 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 de Name

Algunos tipos usados en XAML 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 el XAML y el Name de solo lectura existe para algunos escenarios de código menos comunes.

Tenga en cuentaFrameworkElement.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 deben 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.