Compartilhar via


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 do elemento do objeto XAML

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

Valores XAML

Valor Descrição
prefix Opcional. Um prefixo que mapeia um namespace XAML não padrão. Especificar um prefixo frequentemente não é necessário. Consulte Comentários.
typeNameValue Necessário. Um nome de tipo resolvível para o namespace XAML padrão atual; ou o prefixo mapeado especificado se prefix for fornecido.

Observações

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

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

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

Em implementações de estrutura específicas, algumas propriedades que tomam Type como um valor podem aceitar o nome do tipo diretamente (o valor da 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 do atributo é a sintaxe mais comum usada com essa extensão de marcação. O token de cadeia de caracteres fornecido após o x:Type cadeia de caracteres do identificador é atribuído como o valor TypeName da classe de extensão TypeExtension subjacente. No contexto de esquema XAML padrão dos Serviços XAML do .NET, que se baseia em tipos CLR, o valor desse atributo é o Name do tipo desejado ou contém esse Name precedido por um prefixo para um mapeamento de namespace XAML não padrão.

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

A extensão de marcação x:Type 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, geralmente você pode evitar prefixos ao referenciar valores de tipo XAML. Talvez seja necessário mapear um prefixo se estiver fazendo referência a um tipo de um assembly personalizado ou para tipos que existem em um assembly do WPF, mas forem 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 paraXAML do WPF.

Propriedades de tipo que dão suporte a Typename-as-String

O WPF dá suporte a técnicas que permitem especificar o valor de algumas propriedades do tipo Type sem exigir um uso de extensão de marcação x:Type. 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 adiamento implementado por meio de FrameworkElementFactory.

O Silverlight dá suporte a uma convenção semelhante. Na verdade, o Silverlight atualmente não dá suporte a {x:Type} em seu suporte à linguagem XAML e não aceita {x:Type} usos fora de algumas circunstâncias que se destinam a dar suporte WPF-Silverlight migração XAML. Portanto, o comportamento typename-as-string é interno para toda a avaliação de propriedade nativa do Silverlight em que um 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 podem estar em elementos diferentes da raiz. Para obter mais informações, consulte a seção "XAML 2009" da diretiva x:TypeArguments.

  • O XAML 2009 dá suporte a uma sintaxe para especificar a restrição de um tipo genérico na marcação. Isso pode ser usado por x:TypeArguments, por x:Typeou 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 flexível (XAML que não é compilado por marcação). O XAML compilado por marcação para WPF e a forma BAML de XAML atualmente não dão suporte às palavras-chave e recursos XAML 2009.

Consulte também

  • Style
  • WPF .NET (estilos e modelos de )
  • do WPF .NET (visão geral do XAML)
  • Extensões de marcação e XAML do WPF