Share via


x:Type (Extensión de marcado)

Proporciona el objeto de CLR Type que es el tipo subyacente para un tipo XAML especificado.

Uso de atributos XAML

<object property="{x:Type prefix:typeNameValue}" .../>

Uso de elementos de objeto XAML

<x:Type TypeName="prefix:typeNameValue"/>

Valores XAML

prefix

Opcional. Prefijo que asigna un espacio de nombres XAML no predeterminado. No suele ser necesario especificar un prefijo. Vea la sección Comentarios.

typeNameValue

Obligatorio. Nombre de tipo que se puede resolver para hallar el espacio de nombres XAML predeterminado actual, o el prefijo asignado especificado si se proporciona prefix.

Comentarios

La extensión de marcado x:Type tiene una función similar al operador typeof() en C# o el operador GetType en Microsoft Visual Basic.

La extensión de marcado x:Type proporciona un comportamiento de conversión de cadena para las propiedades que toman el tipo Type. La entrada es un tipo XAML. La relación entre el tipo de entrada XAML y la salida CLR Type es que la salida de Type es el UnderlyingType de la entrada XamlType, después de buscar el XamlType necesario basado en el contexto de esquema XAML y el servicio de IXamlTypeResolver proporciona el contexto.

La clase TypeExtension define el control para esta extensión de marcado en servicios XAML de .NET Framework.

En las implementaciones de marco específico, algunas propiedades que toman Type como un valor pueden aceptar el nombre del tipo directamente (el valor de cadena del tipo Name). Sin embargo, implementar este comportamiento es un escenario complejo. Para obtener ejemplos, vea la sección "Notas de uso de WPF" que aparece a continuación.

La sintaxis de atributo es la que se usa más a menudo con esta extensión de marcado. El token de cadena que se proporciona después de la cadena de identificador x:Type se asigna como valor de TypeName de la clase de extensión TypeExtension subyacente. Bajo el contexto de esquema XAML predeterminado para los servicios XAML de .NET Framework, que está basado en tipos CLR, el valor de este atributo es Name del tipo deseado, o bien contiene ese Name precedido por un prefijo para una asignación de espacio de nombres de XAML no predeterminado.

La extensión de marcado x:Type se puede usar en la sintaxis de elementos de objeto. En este caso, es obligatorio especificar el valor de la propiedad TypeName para inicializar correctamente la extensión.

La extensión de marcado x:Type se puede usar también como atributo detallado; sin embargo, este uso no es habitual: <object property="{x:Type TypeName=typeNameValue}" .../>

Notas de uso de WPF

Espacio de nombres XAML predeterminado y asignación de tipo

El espacio de nombres XAML predeterminado para programación de WPF contiene la mayoría de los tipos XAML que se necesitan para escenarios de XAML típicos; por consiguiente, a menudo se pueden evitar prefijos cuando se hace referencia a los valores de tipo de XAML. Puede que sea necesario asignar un prefijo si se hace referencia a un tipo desde un ensamblado personalizado, o para los tipos que existen en un ensamblado de WPF pero que están dentro de un espacio de nombres CLR que no se ha asignado para formar parte de la definición de espacio de nombres XAML predeterminado. Para obtener más información sobre prefijos, espacios de nombres XAML y cómo asignar espacios de nombres CLR, vea Espacios de nombres y asignación de espacios de nombres XAML para WPF.

Escribir las propiedades que admitan el nombre de tipo como cadena

WPF admite técnicas que permiten especificar el valor de algunas propiedades de tipoType sin necesidad de un uso de extensión de marcado x:Type. En su lugar, puede especificar el valor como una cadena que denomina el tipo. Ejemplos de ello son ControlTemplate.TargetType y Style.TargetType. La compatibilidad para este comportamiento no se proporciona a través de convertidores de tipos o extensiones de marcado. En su lugar, éste es un comportamiento del aplazamiento implementado a través de FrameworkElementFactory.

Silverlight admite una convención similar. De hecho, Silverlight no admite actualmente {x:Type} en la compatibilidad con el lenguaje XAML, y no acepta el uso de {x:Type} fuera de algunas circunstancias pensadas para admitir la migración de XAML de Silverlight y de WPF. Por consiguiente, el comportamiento de nombre de tipo como cadena se integra en toda evaluación de propiedades nativas de Silverlight donde el valor es un objeto Type.

XAML 2009

XAML 2009 proporciona soporte adicional para los tipos genéricos, y modifica el comportamiento de característica de x:TypeArguments y x:Type para proporcionar este soporte.

  • x:TypeArguments y el elemento de objeto asociado para la creación de instancias de un objeto genérico pueden estar en elementos distintos de la raíz. Para obtener más información, vea la sección "XAML 2009" de x:TypeArguments (Directiva).

  • XAML 2009 admite una sintaxis para especificar una restricción del tipo genérico en el marcado. Esto lo puede utilizar x:TypeArguments, x:Type o las dos características en combinación.

  • La implementación XAML de WPF al procesar XAML 2009 para la carga también agrega esta capacidad al comportamiento de la conversión de tipos implícita para ciertas propiedades de marco que utilizan el tipo Type.

En WPF, puede utilizar características de XAML 2009, pero solo para XAML dinámico (no compilado mediante marcado). El XAML compilado por marcado para WPF y el formulario BAML de XAML no admiten actualmente las palabras clave y características de XAML 2009.

Vea también

Referencia

Style

Conceptos

Aplicar estilos y plantillas

Información general sobre XAML (WPF)

Extensiones de marcado y XAML de WPF