Extensão de marcação x:Type

Fornece o objeto CLR Type que é o tipo subjacente para um tipo XAML especificado.

Uso do Atributo XAML

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

Uso de elemento Object do XAML

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

Valores XAML

Valor Descrição
prefix Opcional. Um prefixo que mapeia um namespace XAML não padrão. Frequentemente, não é necessário especificar um prefixo. Consulte Observações.
typeNameValue Obrigatório. Um nome de tipo resolvível para o namespace XAML padrão atual; ou o prefixo mapeado especificado, se prefix for fornecido.

Comentários

A x:Type extensão de marcação tem uma função semelhante ao typeof() operador em C# ou o GetType operador no Microsoft Visual Basic.

A x:Type extensão de marcação fornece um comportamento de conversão de cadeia de caracteres para propriedades que usam o tipo Type. A entrada é um tipo XAML. A relação entre o tipo XAML de entrada e o CLR Type de saída é que a saída Type é a UnderlyingType da entrada XamlType, depois de procurar o necessário XamlType com base no contexto do esquema XAML e no IXamlTypeResolver serviço fornecido pelo contexto.

Nos Serviços XAML do .NET, a manipulação dessa extensão de marcação é definida pela TypeExtension classe.

Em implementações de estrutura específicas, algumas propriedades que tomam Type como um valor podem aceitar o nome do tipo diretamente (o valor de cadeia de caracteres do tipo Name). No entanto, implementar esse comportamento é um cenário complexo. Para obter exemplos, consulte a seção "Notas de uso do WPF" a seguir.

A sintaxe de atributo é a sintaxe mais comum usada com essa extensão de marcação. O token da cadeia de caracteres fornecido após a cadeia de caracteres identificadora x:Type é atribuído como o valor TypeName da classe de extensão subjacente TypeExtension. No contexto de esquema XAML padrão para Serviços XAML do .NET, que se baseia em tipos CLR, o valor desse atributo é o Name do tipo desejado ou contém aquele Name precedido por um prefixo para um mapeamento de namespace XAML não padrão.

A x:Type extensão de marcação pode ser usada na sintaxe do elemento objeto. Nesse caso, especificar o TypeName valor da propriedade é necessário para inicializar corretamente a extensão.

A x:Type extensão de marcação também pode ser usada como um atributo detalhado, no entanto, esse uso não é típico: <object property="{x:Type TypeName=typeNameValue}" .../>

Notas de uso do WPF

Namespace XAML padrão e mapeamento de tipo

O namespace XAML padrão para programação WPF contém a maioria dos tipos XAML necessários para cenários XAML típicos; portanto, muitas vezes você pode evitar prefixos ao fazer referência a valores de tipo XAML. Talvez seja necessário mapear um prefixo se você estiver fazendo referência a um tipo de um assembly personalizado ou para tipos que existem em um assembly WPF, mas são de um namespace CLR que não foi mapeado para o namespace XAML padrão. Para obter mais informações sobre prefixos, namespaces XAML e namespaces CLR de mapeamento, consulte Namespaces XAML e mapeamento de namespace para WPF XAML.

Propriedades de tipo que oferecem suporte a typename-as-string

O WPF oferece suporte a técnicas que permitem especificar o valor de algumas propriedades do tipo Type sem exigir o uso de uma x:Type extensão de marcação. Em vez disso, você pode especificar o valor como uma cadeia de caracteres que nomeia o tipo. Exemplos disso são ControlTemplate.TargetType e Style.TargetType. O suporte para esse comportamento não é fornecido por meio de conversores de tipo ou extensões de marcação. Em vez disso, esse é um comportamento de diferimento implementado por meio do FrameworkElementFactory.

O Silverlight oferece suporte a uma convenção semelhante. Na verdade, o Silverlight atualmente não oferece suporte em seu suporte à linguagem XAML e não aceita {x:Type} usos fora de algumas circunstâncias que se destinam a dar suporte {x:Type} à migração XAML WPF-Silverlight. Portanto, o comportamento typename-as-string é interno a toda a avaliação de propriedade nativa do Silverlight, onde a Type é o valor.

XAML 2009

O XAML 2009 fornece suporte adicional para tipos genéricos e modifica o comportamento do recurso de x:TypeArguments e x:Type para fornecer esse suporte.

  • x:TypeArguments e o elemento de objeto associado para uma instanciação de objeto genérico pode estar em elementos diferentes da raiz. Para obter mais informações, consulte a seção "XAML 2009" da diretiva x:TypeArguments.

  • O XAML 2009 oferece suporte a uma sintaxe para especificar a restrição de um tipo genérico na marcação. Isso pode ser usado por , por x:TypeArgumentsx:Type, ou pelos dois recursos em combinação.

  • A implementação de XAML do WPF ao processar o XAML 2009 para carga também adiciona esse recurso ao comportamento de conversão de tipo implícito para determinadas propriedades da estrutura que usam o tipo Type.

No WPF, você pode usar recursos XAML 2009, mas apenas para XAML solto (XAML que não é compilado com marcação). Atualmente, o XAML compilado por marcação para WPF e a forma BAML de XAML não oferecem suporte às palavras-chave e aos recursos do XAML 2009.

Confira também