Extensiones de marcado x:Staticx:Static Markup Extension

Hace referencia a cualquier entidad de código estática por valor que se define en una manera compatible con Common Language Specification (CLS).References any static by-value code entity that is defined in a Common Language Specification (CLS)–compliant way. La propiedad estática a la que se hace referencia se puede usar para proporcionar el valor de una propiedad en XAML.The static property that is referenced can be used to provide the value of a property in XAML.

Uso de atributos XAMLXAML Attribute Usage

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

Valores XAMLXAML Values

prefix Opcional.Optional. Prefijo que hace referencia a un espacio de nombres XAML asignado y no predeterminado.A prefix that refers to a mapped, non-default XAML namespace. 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.prefix is shown explicitly in the usage because you rarely reference static properties that come from a default XAML namespace. Vea la sección Comentarios.See Remarks.
typeName Requerido.Required. Nombre del tipo que define el miembro estático deseado.The name of the type that defines the desired static member.
staticMemberName Requerido.Required. Nombre del miembro de valor estático deseado (una constante, una propiedad estática, un campo o un valor de enumeración).The name of the desired static value member (a constant, a static property, a field, or an enumeration value).

ComentariosRemarks

La entidad de código a la que se hace referencia debe ser una de las siguientes:The code entity that is referenced must be one of the following:

  • Una constanteA constant
  • Una propiedad estáticaA static property
  • Un campoA field
  • Un valor de enumeraciónAn enumeration value

Si se especifica cualquier otra entidad de código, como una propiedad no estática, se producirá un error en tiempo de compilación si se compila el marcado XAML o una excepción de análisis en tiempo de carga XAML.Specifying any other code entity, such as a nonstatic property, causes a compile-time error if the XAML is markup compiled, or a XAML load-time parse exception.

Puede hacer referencias x:Static a campos o propiedades estáticos 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.You can make x:Static references to static fields or properties that are not in the default XAML namespace for the current XAML document; however, this requires a prefix mapping. Los espacios de nombres XAML casi siempre se definen en el elemento raíz del documento XAML.XAML namespaces are almost always defined on the root element of the XAML document.

Las operaciones de búsqueda de propiedades estáticas se pueden realizar mediante .NET Framework servicios XAML y sus lectores XAML y escritores de XAML, cuando se ejecutan con el contexto de esquema XAML predeterminado.The lookup operations for static properties can be performed by .NET Framework XAML Services and its XAML readers and XAML writers, when they are running with the default XAML schema context. Este contexto de esquema XAML puede utilizar la reflexión de CLR para proporcionar los valores estáticos necesarios para la construcción del gráfico de objetos.This XAML schema context can use CLR reflection to provide the necessary static values for object graph construction. El typeName que especifique es en realidad un nombre de tipo XAML, no un nombre de tipo de CLR, aunque son esencialmente 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.The typeName you specify is actually a XAML type name, not a CLR type name, although these are essentially the same name when using the default XAML schema context or when using all existing CLR-based XAML-implementing frameworks.

Tenga cuidado al crear referencias x:Static que no son directamente el tipo del valor de una propiedad.Use caution when you make x:Static references that are not directly the type of a property's value. En la secuencia de procesamiento de XAML, los valores proporcionados por una extensión de marcado no invocan la conversión de valores adicionales.In the XAML processing sequence, provided values from a markup extension do not invoke additional value conversion. Esto es así incluso si la referencia de x:Static crea una cadena de texto, y una conversión de valor para los valores de atributo basados en la cadena de texto suele producirse para ese miembro específico o para cualquier valor de miembro del tipo de valor devuelto.This is true even if your x:Static reference creates a text string, and a value conversion for attribute values based on text string typically occurs either for that specific member or for any member values of the return type.

La sintaxis de atributo es la que se usa normalmente con esta extensión de marcado.Attribute syntax is the most common syntax used with this markup extension. 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.The string token provided after the x:Static identifier string is assigned as the Member value of the underlying StaticExtension extension class.

Hay otros dos usos de XAML que son técnicamente posibles.There are two other XAML usages that are technically possible. Sin embargo, estos usos son menos comunes porque son innecesariamente detallados:However, these usages are less common because they are unnecessarily verbose:

  1. Sintaxis de elemento de objeto.Object element syntax.

    <x:Static Member="prefix:typeName.staticMemberName" ... />
    
  2. Sintaxis de atributo con propiedad de miembro explícita para la cadena de inicialización.Attribute syntax with explicit Member property for initialization string.

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

En la implementación de los servicios de .NET Framework XAML, el control de esta extensión de marcado se define mediante la clase StaticExtension.In the .NET Framework XAML Services implementation, the handling for this markup extension is defined by the StaticExtension class.

x:Static es una extensión de marcado.x:Static is a markup extension. Todas las extensiones de marcado de 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.All markup extensions in XAML use the { and } characters in their attribute syntax, which is the convention by which a XAML processor recognizes that a markup extension must provide a value. Para más información sobre las extensiones de marcado, vea Markup Extensions for XAML Overview.For more information about markup extensions, see Markup Extensions for XAML Overview.

Notas de uso de WPFWPF Usage Notes

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}.The default XAML namespace you use for WPF programming does not contain many useful static properties, and most of the useful static properties have support such as type converters that facilitate the usage without requiring {x:Static} . En el caso de las propiedades estáticas, debe asignar un prefijo para un espacio de nombres XAML si se cumple alguna de las siguientes condiciones:For static properties, you must map a prefix for a XAML namespace if one of the following is true:

  • Se hace referencia a un tipo que existe en WPF pero que no forma parte del espacio de nombres XAML predeterminado para WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation).You are referencing a type that exists in WPF but is not part of the default XAML namespace for WPF (http://schemas.microsoft.com/winfx/2006/xaml/presentation). Este es un escenario bastante común para usar x:Static.This is a fairly common scenario for using x:Static. Por ejemplo, puede usar una referencia de x:Static con una asignación de espacio de nombres XAML para el espacio de nombres CLR System y el ensamblado mscorlib con el fin de hacer referencia a las propiedades estáticas de la clase Environment.For example, you might use an x:Static reference with a XAML namespace mapping to the System CLR namespace and mscorlib assembly in order to reference the static properties of the Environment class.

  • Hace referencia a un tipo de un ensamblado personalizado.You are referencing a type from a custom assembly.

  • Está haciendo referencia a un tipo que existe en un ensamblado de WPF, pero ese tipo está dentro de un espacio de nombres CLR que no estaba asignado para formar parte del espacio de nombres XAML predeterminado de WPF.You are referencing a type that exists in a WPF assembly, but that type is within a CLR namespace that was not mapped to be part of the WPF default XAML namespace. La asignación de espacios de nombres CLR en el espacio de nombres XAML predeterminado para WPF se realiza mediante definiciones en los diversos ensamblados de WPF (para obtener más información sobre este concepto, vea espacios de nombres y asignación de espacios de nombres XAML para WPF).The mapping of CLR namespaces into the default XAML namespace for WPF is performed by definitions in the various WPF assemblies (for more information about this concept, see XAML Namespaces and Namespace Mapping for WPF XAML). Los espacios de nombres CLR no asignados pueden existir si ese espacio de nombres CLR se compone principalmente de definiciones de clase que normalmente no están destinadas a XAML, como System.Windows.Threading.Non-mapped CLR namespaces can exist if that CLR namespace is composed mostly of class definitions that are not typically intended for XAML, such as System.Windows.Threading.

Para obtener más información sobre cómo usar prefijos y espacios de nombres XAML para WPF, vea espacios de nombres y asignación de espacios de nombres XAML para WPF.For more information on how to use prefixes and XAML namespaces for WPF, see XAML Namespaces and Namespace Mapping for WPF XAML.

Vea tambiénSee also