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