Genéricos em XAML

Os Serviços XAML do .NET, conforme implementados System.Xaml , fornecem suporte para o 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 apropriado Add para casos de coleta genéricos. Este tópico descreve aspectos de uso e referência de tipos genéricos em XAML.

x:TypeArguments

x:TypeArguments é uma diretiva definida pela linguagem XAML. Quando ele é usado como 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 do .NET XAML Services do , que inclui exemplos de x:TypeArgumentssintaxe, consulte x:TypeArguments Directive.

Como x:TypeArguments usa uma cadeia de caracteres e tem suporte de conversor de tipo, ela geralmente é declarada no uso de XAML como um atributo.

No fluxo de nó XAML, as informações declaradas por x:TypeArguments podem ser obtidas em uma StartObject posição no fluxo de XamlType.TypeArguments nó. O valor de retorno de é uma lista de XamlType.TypeArgumentsXamlType valores. 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

Em XAML, um tipo genérico sempre deve ser representado como um genérico restrito. Um genérico irrestrito nunca está presente no sistema de tipos XAML ou em um fluxo de nós 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 a genéricos por meio da classe definida pelos Serviços XAML do XamlTypeTypeConverter .NET.

O formulário de sintaxe de atributo XAML habilitado por XamlTypeTypeConverter altera a convenção de sintaxe MSIL/CLR típica que usa colchetes angulares para tipos e restrições de genéricos e, em vez disso, substitui parênteses para o contêiner de restrição. Para obter um exemplo, consulte x:TypeArguments Directive.

Recursos de genéricos e XAML 2009

Se você usar o XAML 2009 em vez de mapear os tipos base do CLR para obter tipos XAML para primitivas de linguagem comum, poderá usar tipos internos do XAML 2009 como itens de informações no 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 oferecer suporte a usos genéricos incluem a definição de uma extensão de marcação personalizada que pode retornar tipos genéricos ou o fornecimento de 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 , mas apenas para XAML solto (XAML que não é compilado com x:TypeArgumentsmarcaçã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.

Os fluxos de trabalho personalizados no Windows Workflow Foundation para .NET Framework 3.5 não oferecem suporte ao uso genérico de XAML.

Confira também