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
, porx: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 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
.NET Desktop feedback