x:Type (Extensión de marcado)

Proporciona el objeto 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

Value Descripción
prefix Opcional. Un prefijo que asigna un espacio de nombres XAML no predeterminado. La especificación de un prefijo a menudo no es necesaria. Vea la sección Comentarios.
typeNameValue Obligatorio. Un nombre de tipo que se puede resolver en el espacio de nombres XAML predeterminado; 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 al operador GetType de Microsoft Visual Basic.

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

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

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

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:Type se asigna como valor de TypeName de la clase de extensión TypeExtension subyacente. En el contexto de esquema XAML predeterminado para los servicios XAML de .NET, que se basa en tipos CLR, el valor de este atributo es, o bien el Name del tipo deseado, o bien contiene ese Name precedido por un prefijo para una asignación de espacio de nombres XAML no predeterminada.

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

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

Notas de uso de WPF

Asignación de tipos y espacio de nombres XAML predeterminado

El espacio de nombres XAML predeterminado para la programación WPF contiene la mayoría de los tipos XAML que necesita para escenarios XAML típicos; por lo tanto, a menudo puede evitar prefijos al hacer referencia a valores de tipo XAML. Es posible que tenga que asignar un prefijo si hace referencia a un tipo de un ensamblado personalizado o a tipos que existen en un ensamblado WPF, pero que proceden de un espacio de nombres CLR que no se ha asignado al espacio de nombres XAML predeterminado. Para obtener más información sobre los prefijos, los espacios de nombres XAML y los espacios de nombres CLR de asignación, consulte Espacios de nombres XAML y Asignación de espacios de nombres para XAML de WPF.

Propiedades de tipo que admiten typename-as-string

WPF admite técnicas que permiten especificar el valor de algunas propiedades de tipo Type sin necesidad de un uso de extensión de marcado x:Type. En su lugar, puede especificar el valor como una cadena que asigna un nombre al tipo. Ejemplos de esto son ControlTemplate.TargetType y Style.TargetType. No se proporciona compatibilidad con este comportamiento a través de convertidores de tipos o extensiones de marcado. Más bien se trata de un comportamiento de aplazamiento implementado a través de FrameworkElementFactory.

Silverlight admite una convención similar. De hecho, actualmente Silverlight no admite {x:Type} en su compatibilidad con lenguaje XAML y no acepta usos de {x:Type} aparte de algunas pocas circunstancias que están pensadas para admitir la migración de XAML a WPF-Silverlight. Por lo tanto, el comportamiento typename-as-string está integrado en toda la evaluación de propiedades nativas de Silverlight donde un Type es el valor.

XAML 2009

XAML 2009 proporciona compatibilidad adicional con tipos genéricos y modifica el comportamiento de características de x:TypeArguments y x:Type para proporcionar esta compatibilidad.

  • x:TypeArguments y el elemento de objeto asociado para una creación de instancias de objeto genérico pueden estar en elementos distintos de la raíz. Para obtener más información, consulta la sección «XAML 2009» de la directiva x:TypeArguments.

  • XAML 2009 admite una sintaxis para especificar la restricción de un tipo genérico en el marcado. Puede ser utilizado por x:TypeArguments, por x:Type o por las dos características en combinación.

  • La implementación XAML de WPF al procesar XAML 2009 para la carga también agrega esta funcionalidad al comportamiento de conversión de tipos implícito para determinadas propiedades de marco que usan el tipo Type.

En WPF puede usar las características de XAML 2009 pero solo para XAML dinámico (XAML que no se haya compilado por marcado). XAML compilado por marcado para WPF y el formulario BAML de XAML no admiten de momento las palabras clave y características de XAML 2009.

Vea también