Partilhar via


x:Extensão de marcação de tipo

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

Uso de atributos XAML

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

Uso do elemento de 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. Ver Observações.
typeNameValue Necessário. Um nome de tipo resolúvel para o namespace XAML padrão atual; ou o prefixo mapeado especificado, se prefix for fornecido.

Comentários

A extensão de marcação x:Type tem uma função semelhante ao operador typeof() em C# ou ao 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 usam o tipo Type. A entrada é um tipo XAML. A relação entre o tipo XAML de entrada e o CLR de saída Type é 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 de IXamlTypeResolver que o contexto fornece.

Nos Serviços XAML .NET, a manipulação para essa 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, a implementação desse 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 de cadeia de caracteres fornecido após a cadeia de caracteres de identificador de x:Type é atribuído como o valor TypeName da classe de extensão de TypeExtension subjacente. No contexto de esquema XAML padrão para Serviços XAML .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 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, esta utilização não é típica: <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 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 suportam typename-as-string

O WPF suporta 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, este é um comportamento de adiamento implementado através FrameworkElementFactory.

O Silverlight suporta uma convenção semelhante. Na verdade, o Silverlight atualmente não oferece suporte a {x:Type} em seu suporte à linguagem XAML e não aceita usos de {x:Type} fora de algumas circunstâncias destinadas a dar suporte à migração WPF-Silverlight XAML. Portanto, o comportamento typename-as-string é incorporado a todas as avaliações de propriedades nativas do Silverlight, onde 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 fornecer esse suporte.

  • x:TypeArguments e o elemento de objeto associado para uma instanciação de objeto genérica podem estar em elementos diferentes da raiz. Para obter mais informações, consulte a seção "XAML 2009" de 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 x:TypeArguments, por x:Typeou pelos dois recursos em combinação.

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

No WPF, você pode usar recursos XAML 2009, mas apenas para XAML solto (XAML que não é compilado por marcação). Atualmente, o XAML compilado por marcação para WPF e o formulário BAML de XAML não suportam atualmente as palavras-chave e os recursos do XAML 2009.

Ver também