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:TypeArguments
x: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
.NET Desktop feedback