x:Name (Directiva)

Identifica de forma única los elementos definidos por XAML en un ámbito de nombres XAML. Los ámbitos de nombres XAML y sus modelos de unidad se pueden aplicar a los objetos con instancias, cuando los marcos proporcionan API o implementan comportamientos que acceden al gráfico de objetos creados por XAML en tiempo de ejecución.

Uso de atributos XAML

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

Valores XAML

XAMLNameValue Cadena que se ajusta a las restricciones de la gramática XamlName.

Observaciones

Después de aplicar al modelo de programación de respaldo de un marco, el nombre es equivalente a la variable que contiene una referencia de objeto o una instancia tal y como devuelve x:Name un constructor.

El valor de un uso x:Name de directiva debe ser único dentro de un ámbito de nombres XAML. De forma predeterminada, cuando la API de servicios XAML de .NET lo usa, el ámbito de nombres XAML principal se define en el elemento raíz XAML de una única producción XAML y abarca los elementos contenidos en esa producción XAML. Los marcos de trabajo pueden definir ámbitos de nombres XAML discretos adicionales que pueden producirse dentro de una sola producción XAML para abordar escenarios específicos. Por ejemplo, en WPF, cualquier plantilla que también esté definida en esa producción XAML define y crea nuevos ámbitos de nombres XAML. Para obtener más información sobre ámbitos de nombres XAML (escritos para WPF pero pertinentes para muchos conceptos de ámbito de nombres XAML), vea Ámbitos de nombres XAML de WPF.

En general, x:Name no se debe aplicar en situaciones que también usan x:Key . Las implementaciones XAML de marcos existentes específicos han introducido conceptos de sustitución entre x:Key y , pero no es una práctica x:Name recomendada. Los servicios XAML de .NET no admiten estos conceptos de sustitución al controlar información de nombre o clave, INameScope como o DictionaryKeyPropertyAttribute .

Las reglas de permiso de, así como el cumplimiento de la unidad de nombre, pueden definirse mediante x:Name marcos de implementación específicos. Sin embargo, para poder usarse con los servicios XAML de .NET, las definiciones de marco de trabajo de la unidad de ámbito de nombres XAML deben ser coherentes con la definición de información de esta documentación y deben usar las mismas reglas con respecto a dónde se aplica la INameScope información. Por ejemplo, la implementación divide varios elementos de marcado en intervalos independientes, como diccionarios de recursos, el árbol lógico creado por el XAML de nivel de página, plantillas y otro contenido aplazado y, a continuación, aplica la unidad de nombre XAML dentro de cada uno de esos ámbitos de nombres Windows Presentation Foundation (WPF) NameScope XAML.

Para los tipos personalizados que usan los escritores de objetos XAML de servicios XAML de .NET, se puede establecer o cambiar una propiedad que se x:Name asigna a en un tipo. Este comportamiento se define haciendo referencia al nombre de la propiedad que se va a asignar con en RuntimeNamePropertyAttribute el código de definición de tipo. RuntimeNamePropertyAttribute es un atributo de nivel de tipo.

Using.NET XAML Services, la lógica de respaldo para la compatibilidad con el ámbito de nombres XAML se puede definir de forma neutra en el marco mediante la implementación de la INameScope interfaz .

Notas de uso de WPF

En la configuración de compilación estándar para una aplicación que usa XAML, clases parciales y código subyacente, el especificado se convierte en el nombre de un campo que se crea en el código subyacente cuando se procesa mediante una tarea de compilación de marcado y ese campo contiene una referencia al WPF x:Name objeto XAML . De forma predeterminada, el campo creado es interno. Puede cambiar el acceso a los campos especificando el atributo x:FieldModifier. En WPF y Silverlight, la secuencia es que la compilación de marcado define y denomina el campo en una clase parcial, pero el valor está inicialmente vacío. A continuación, se llama a InitializeComponent un método generado denominado desde el constructor de clase . InitializeComponent consta de llamadas que usan cada uno de los valores que existen en la parte definida por XAML de la clase FindName x:Name parcial como cadenas de entrada. A continuación, los valores devueltos se asignan a la referencia de campo con nombre parecido para rellenar los valores de campo con objetos creados a partir del análisis XAML. La ejecución de permite hacer referencia al gráfico de objetos en tiempo de ejecución mediante el nombre del campo / directamente, en lugar de tener que llamar explícitamente en cualquier momento en que se necesite una referencia a un objeto InitializeComponent x:Name definido por FindName XAML.

Para una aplicación WPF que usa los destinos de Microsoft Visual Basic e incluye archivos XAML con acción de compilación, se crea una propiedad de referencia independiente durante la compilación que agrega la palabra clave a todos los elementos que tienen , para admitir la sintaxis de los delegados del controlador de Page WithEvents x:Name Handles eventos. Esta propiedad siempre es pública. Para más información, vea Control de eventos en Visual Basic y WPF.

x:Name el procesador XAML de WPF usa para registrar un nombre en un ámbito de nombres XAML en tiempo de carga, incluso para los casos en los que las acciones de compilación no compilan el marcado de la página (por ejemplo, XAML flexible de un diccionario de recursos). Una razón de este comportamiento es porque x:Name es posible que sea necesario para el ElementName enlace. Para obtener más información, vea Información general sobre el enlace de datos.

Como se mencionó anteriormente, x:Name (o Name ) no se debe aplicar en situaciones que también usan x:Key . tiene un comportamiento especial de definirse como un ámbito de nombres XAML, pero devolver valores No implementados o NULL para las API como una manera de WPF ResourceDictionary aplicar este INameScope comportamiento. Si el analizador XAML de WPF encuentra o en un objeto definido por XAML, el nombre no se Name agrega a ningún ámbito de nombres x:Name ResourceDictionary XAML. Al intentar encontrar ese nombre desde cualquier ámbito de nombres XAML y los métodos FindName no se devolverán resultados válidos.

x:Name y Name

Muchos escenarios de aplicación de WPF pueden evitar cualquier uso del atributo , ya que la propiedad de dependencia especificada en el espacio de nombres XAML predeterminado para varias de las clases base importantes, como y satisface este x:Name Name mismo FrameworkElement FrameworkContentElement propósito. Todavía hay algunos escenarios comunes de XAML y WPF en los que es importante el acceso de código a un elemento sin ninguna Name propiedad en el nivel de marco. Por ejemplo, ciertas clases de compatibilidad con animaciones y guiones gráficos no admiten una propiedad, pero a menudo es necesario hacer referencia a ellas en el código para Name controlar la animación. Debe especificar como atributo en escalas de tiempo y transformaciones que se crean en XAML, si piensa hacer referencia x:Name a ellos desde el código más adelante.

Si está disponible como una propiedad en la clase y se puede usar indistintamente como atributos, pero se producirá una excepción de análisis si ambos se especifican Name Name en el mismo x:Name elemento. Si se compila el marcado XAML, la excepción se producirá en la compilación de marcado; de lo contrario, se producirá al cargarse.

Name se puede establecer mediante la sintaxis de atributo XAML y en el código mediante ; tenga en cuenta sin embargo que establecer la propiedad en el código no crea la referencia de campo representativo dentro del ámbito de nombres XAML en la mayoría de las circunstancias en las que el XAML ya está SetValue Name cargado. En lugar de intentar establecer en Name el código, use NameScope métodos del código, en el ámbito de nombres adecuado.

Name también se puede establecer mediante la sintaxis de elementos de propiedad con texto interno, pero eso no es habitual. Por el contrario, no se puede establecer en la sintaxis del elemento de propiedad XAML o en el código que usa ; solo se puede establecer mediante la sintaxis de atributo en objetos x:Name porque es una directiva SetValue .

Notas de uso de Silverlight

x:Name para Silverlight se documenta por separado. Para obtener más información, vea Espacio de nombres XAML (x:) Características del lenguaje (Silverlight).

Consulte también