Extensiones de marcado x:Static

Hace referencia a cualquier entidad estática de código por valor definida de forma compatible con Common Language Specification (CLS). La propiedad estática a la que se hace referencia se puede usar para proporcionar el valor de una propiedad en XAML.

Uso de atributos XAML

<object property="{x:Static prefix:typeName.staticMemberName}" .../>

Valores XAML

Value Descripción
prefix Opcional. Prefijo que hace referencia a un espacio de nombres XAML asignado y no predeterminado. prefix se muestra explícitamente en el uso porque rara vez hace referencia a propiedades estáticas que proceden de un espacio de nombres XAML predeterminado. Vea la sección Comentarios.
typeName Obligatorio. Nombre del tipo que define el miembro estático deseado.
staticMemberName Obligatorio. Nombre del miembro de valor estático deseado (una constante, una propiedad estática, un campo o un valor de enumeración).

Comentarios

La entidad de código a la que se hace referencia debe ser una de las siguientes:

  • Una constante
  • Una propiedad estática
  • Un campo
  • Un valor de enumeración

Especificar cualquier otra entidad de código, como una propiedad no estática, genera un error en tiempo de compilación si el XAML está compilado por marcado, o una excepción de análisis en tiempo de carga de XAML.

Se pueden hacer referencias x:Static a campos estáticos o propiedades que no están en el espacio de nombres XAML predeterminado para el documento XAML mismo; sin embargo, esto requiere una asignación de prefijo. Los espacios de nombres XAML casi siempre se definen en el elemento raíz del documento XAML.

Las operaciones de búsqueda de propiedades estáticas las pueden realizar los servicios XAML de .NET y sus lectores XAML y escritores XAML cuando se ejecutan con el contexto de esquema XAML predeterminado. Este contexto de esquema XAML puede usar la reflexión CLR para proporcionar los valores estáticos necesarios para la construcción del grafo de objetos. El typeName que se especificado es realmente un nombre de tipo XAML, no un nombre de tipo CLR, aunque ambos son básicamente el mismo nombre cuando se usa el contexto de esquema XAML predeterminado o cuando se usan todos los marcos de implementación de XAML basados en CLR que existen.

Tenga cuidado al hacer referencias x:Static que no sean directamente el tipo de valor de una propiedad. En la secuencia de procesamiento XAM los valores proporcionados de una extensión de marcado no invocan la conversión de valor adicional. Esto es cierto incluso si la referencia x:Static crea una cadena de texto y se produce una conversión de valor para los valores de los atributos basados en la cadena de texto, bien para ese miembro específico, bien para cualquier valor de miembro del tipo devuelto.

La sintaxis de atributo es la que se usa normalmente con esta extensión de marcado. El token de cadena que se proporciona después de la cadena de identificador x:Static se asigna como valor de Member de la clase de extensión StaticExtension subyacente.

Hay otros dos usos de XAML que son técnicamente posibles. Sin embargo, estos usos son menos comunes porque son innecesariamente detallados:

  1. Sintaxis de elemento de objeto.

    <x:Static Member="prefix:typeName.staticMemberName" ... />
    
  2. Sintaxis de atributo con la propiedad «Member» explícita para la cadena de inicialización.

    <object property="{x:Static Member=prefix:typeName.staticMemberName}" ... />
    

La clase StaticExtension define el control para esta extensión de marcado en la implementación de los servicios XAML de .NET.

x:Static es una extensión de marcado. Todas las extensiones de marcado de XAML utilizan los caracteres { y } en su sintaxis de atributo, que es la convención que permite que un procesador de XAML reconozca que la extensión de marcado debe proporcionar un valor. Para más información sobre las extensiones de marcado, vea Markup Extensions for XAML Overview.

Notas de uso de WPF

El espacio de nombres XAML predeterminado que se usa para la programación WPF no contiene muchas propiedades estáticas útiles y la mayoría de las propiedades estáticas útiles tienen compatibilidad como convertidores de tipos que facilitan el uso sin requerir {x:Static}. Para las propiedades estáticas, debe asignar un prefijo para un espacio de nombres XAML si se cumple una de las siguientes condiciones:

  • Está haciendo referencia a un tipo que existe en WPF, pero no forma parte del espacio de nombres XAML predeterminado para WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation). Se trata de un escenario bastante común para usar x:Static. Por ejemplo, puede usar una referencia x:Static con una asignación de espacio de nombres XAML al espacio de nombres CLR System y al ensamblado mscorlib para hacer referencia a las propiedades estáticas de la clase Environment.

  • Está haciendo referencia a un tipo desde un ensamblado personalizado.

  • Está haciendo referencia a un tipo que existe en un ensamblado WPF, pero ese tipo está dentro de un espacio de nombres CLR que no se ha asignado para formar parte del espacio de nombres XAML predeterminado de WPF. La asignación de espacios de nombres CLR al espacio de nombres XAML predeterminado para WPF se realiza mediante definiciones en los distintos ensamblados de WPF (para obtener más información sobre este concepto, vea Espacios de nombres XAML y Asignación de espacios de nombres para XAML de WPF). Los espacios de nombres CLR no asignados pueden existir si ese espacio de nombres CLR se compone principalmente de definiciones de clase que no suelen estar pensadas para XAML, como System.Windows.Threading.

Para obtener más información sobre cómo usar prefijos y espacios de nombres XAML para WPF, consulte Espacios de nombres XAML y Asignación de espacios de nombres para XAML de WPF.

Vea también