Genéricos em XAML
Os Serviços XAML do .NET, conforme implementado em System.Xaml, dão suporte ao uso de tipos CLR genéricos. Esse suporte inclui especificar as restrições de genéricos como um argumento de tipo e impor a restrição chamando o método Add
apropriado para casos de coleção genéricos. Este tópico descreve aspectos de uso e referência de tipos genéricos no XAML.
x:TypeArguments
x:TypeArguments
é uma diretiva definida pela linguagem XAML. Quando ele é usado como um membro de um tipo XAML que é apoiado por um tipo genérico, x:TypeArguments
passa argumentos de tipo de restrição do genérico para o construtor de suporte. Para obter a sintaxe de referência que pertence ao uso de x:TypeArguments
dos Serviços XAML do .NET, que inclui exemplos de sintaxe, consulte diretiva x:TypeArguments.
Como x:TypeArguments
usa uma cadeia de caracteres e tem suporte de conversor de tipo, ela normalmente é declarada no uso de XAML como um atributo.
No fluxo de nós XAML, as informações declaradas por x:TypeArguments
podem ser obtidas de XamlType.TypeArguments em uma posição StartObject
no fluxo de nós. O valor retornado de XamlType.TypeArguments é uma lista de valores XamlType. A determinação de se um tipo XAML representa um tipo genérico pode ser feita chamando XamlType.IsGeneric.
Regras e convenções de sintaxe para genéricos em XAML
No XAML, um tipo genérico sempre deve ser representado como um genérico restrito. Um genérico não treinado nunca está presente no sistema de tipos XAML ou em um fluxo de nó XAML e não pode ser representado na marcação XAML. Um genérico pode ser referenciado dentro da sintaxe de atributo XAML para casos em que é uma restrição de tipo aninhado de um genérico sendo referenciado por x:TypeArguments
ou para casos em que x:Type
fornece uma referência de tipo CLR para um tipo genérico. Há suporte para a referência de genéricos por meio da classe XamlTypeTypeConverter definida pelos Serviços XAML do .NET.
O formulário de sintaxe do atributo XAML habilitado por XamlTypeTypeConverter altera a convenção típica de sintaxe MSIL/CLR que usa colchetes angulares para tipos e restrições de genéricos e, em vez disso, substitui parênteses pelo contêiner de restrição. Para obter um exemplo, consulte diretiva x:TypeArguments.
Genéricos e recursos XAML 2009
Se você usar o XAML 2009 em vez de mapear os tipos base CLR para obter tipos XAML para primitivos de linguagem comum, poderá usar tipos internos XAML 2009 como itens de informações em x:TypeArguments
. Por exemplo, você pode declarar o seguinte (mapeamentos de prefixo não mostrados, mas x
é o namespace XAML da linguagem XAML para XAML 2009):
<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>
Suporte a genéricos no WPF
Para uso do XAML 2006 ao direcionar especificamente o WPF, x:Class também deve ser fornecido no mesmo elemento que x:TypeArguments
e esse elemento deve ser o elemento raiz em um documento XAML. O elemento raiz deve ser mapeado para um tipo genérico com pelo menos um argumento de tipo. Um exemplo é PageFunction<T>.
Possíveis soluções alternativas para dar suporte a usos genéricos incluem definir uma extensão de marcação personalizada que pode retornar tipos genéricos ou fornecer uma definição de classe de encapsulamento que deriva de um tipo genérico, mas nivela a restrição genérica em sua própria definição de classe.
No WPF, você pode usar recursos XAML 2009 junto com x:TypeArguments
, mas apenas para XAML (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.
Fluxos de trabalho personalizados no Windows Workflow Foundation para .NET Framework 3.5 não dão suporte ao uso genérico de XAML.
Consulte também
- diretiva x:TypeArguments
- de diretiva x:Class
- tipos internos para primitivos comuns da linguagem XAML
.NET Desktop feedback