Compartir a través de


x:Type Markup Extension

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

Valor Descripción
prefix Opcional. Prefijo que asigna un espacio de nombres XAML no predeterminado. La especificación de un prefijo no suele ser necesaria. Vea comentarios.
typeNameValue Obligatorio. Un nombre de tipo que se puede resolver en el espacio de nombres XAML predeterminado actual; o el prefijo asignado especificado si se proporciona prefix.

Observaciones

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

La extensión de marcado x:Type 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 el Type de salida es el UnderlyingType de la entrada XamlType, después de buscar los XamlType necesarios en función del contexto de esquema XAML y del servicio IXamlTypeResolver que proporciona el contexto.

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

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 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:Type como valor 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 el Name del tipo deseado o contiene que 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 de objeto. En este caso, es necesario especificar el valor de la propiedad TypeName para inicializar correctamente la extensión.

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

Notas de uso de WPF

Espacio de nombres XAML predeterminado y asignación de tipos

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 puedes evitar prefijos al hacer referencia a valores de tipo XAML. Es posible que tengas que asignar un prefijo si estás haciendo 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 asignó al espacio de nombres XAML predeterminado. Para obtener más información sobre los prefijos, los espacios de nombres XAML y la asignación de espacios de nombres CLR, consulta 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. Algunos 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. En su lugar, se trata de un comportamiento de aplazamiento implementado a través de FrameworkElementFactory.

Silverlight admite una convención similar. De hecho, Silverlight no admite actualmente {x:Type} en su compatibilidad con lenguaje XAML y no acepta {x:Type} usos fuera de algunas circunstancias que están pensadas para admitir WPF-Silverlight migración xaml. 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 directiva x:TypeArguments.

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

  • La implementación de 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 del marco que usan el tipo Type.

En WPF, puedes usar características xaml 2009, pero solo para XAML flexible (XAML que no está compilado con marcado). Xaml compilado con marcado para WPF y la forma BAML de XAML no admiten actualmente las palabras clave y características xaml 2009.

Consulte también