Compartir a través de


x:Extensión de marcado estático

Hace referencia a cualquier entidad de código estática 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

Valor Descripción
prefix Opcional. Prefijo que hace referencia a un espacio de nombres XAML asignado no predeterminado. prefix se muestra explícitamente en el uso porque rara vez se hace referencia a propiedades estáticas que proceden de un espacio de nombres XAML predeterminado. Vea 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).

Observaciones

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

  • Constante
  • Una propiedad estática
  • Un campo
  • Valor de enumeración

Al especificar cualquier otra entidad de código, como una propiedad no estática, se produce un error en tiempo de compilación si el CÓDIGO XAML está compilado o si se trata de una excepción de análisis en tiempo de carga XAML.

Puedes hacer x:Static referencias a campos estáticos o propiedades que no están en el espacio de nombres XAML predeterminado para el documento XAML actual; 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.

Los servicios XAML de .NET pueden realizar las operaciones de búsqueda de propiedades estáticas 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 especifiques es realmente un nombre de tipo XAML, no un nombre de tipo CLR, aunque 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 existentes.

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

La sintaxis de atributo es la sintaxis más común que se usa con esta extensión de marcado. El token de cadena proporcionado después de asignar la cadena de identificador de x:Static como valor Member de la clase de extensión StaticExtension subyacente.

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

  1. Sintaxis del elemento object.

    <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}" ... />
    

En la implementación de servicios XAML de .NET, el control de esta extensión de marcado se define mediante la clase StaticExtension.

x:Static es una extensión de marcado. Todas las extensiones de marcado en XAML usan los caracteres { y } en su sintaxis de atributo, que es la convención por la que un procesador XAML reconoce que una extensión de marcado debe proporcionar un valor. Para obtener más información sobre las extensiones de marcado, consulta Extensiones de marcado para xaml.

Notas de uso de WPF

El espacio de nombres XAML predeterminado que se usa para la programación de 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 necesidad de {x:Static} . Para las propiedades estáticas, debes asignar un prefijo para un espacio de nombres XAML si uno de los siguientes es true:

  • Estás 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). Este es un escenario bastante común para usar x:Static. Por ejemplo, puede usar una referencia de x:Static con una asignación de espacio de nombres XAML al espacio de nombres CLR de System y el 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ás 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 asignó 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, consulta espacios de nombres XAML y Asignación de espacios de nombres para XAML de WPF.

Consulte también