Genéricos em XAML
Os Serviços XAML .NET, conforme implementados no System.Xaml, fornecem suporte para o uso de tipos CLR genéricos. Esse suporte inclui a especificação das restrições de genéricos como um argumento de tipo e a imposição da restrição chamando o método Add
apropriado para casos de coleta genéricos. Este tópico descreve aspetos de uso e referência a tipos genéricos em 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 restrito 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 .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ó XAML, as informações declaradas por x:TypeArguments
podem ser obtidas de XamlType.TypeArguments em uma posição StartObject
no fluxo de nó. O valor de retorno de XamlType.TypeArguments é uma lista de valores XamlType. A determinação 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 deve sempre ser representado como um genérico restrito. Um genérico sem restrições nunca está presente no sistema de tipo 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 que está sendo referenciado por x:TypeArguments
, ou para casos em que x:Type
fornece uma referência de tipo CLR para um tipo genérico. A referência a genéricos é suportada por meio da classe XamlTypeTypeConverter definida pelos Serviços XAML do .NET.
A forma de sintaxe de atributo XAML habilitada 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ções. Para obter um exemplo, consulte diretiva x:TypeArguments.
Recursos de genéricos e XAML 2009
Se você usar XAML 2009 em vez de mapear os tipos base CLR para obter tipos XAML para primitivos de linguagem comum, poderá usar tipos internos do XAML 2009 como itens de informação 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 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 type. Um exemplo é PageFunction<T>.
As possíveis soluções alternativas para dar suporte a usos genéricos incluem a definição de 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 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.
Fluxos de trabalho personalizados no Windows Workflow Foundation para .NET Framework 3.5 não oferecem suporte ao uso genérico de XAML.
Ver também
.NET Desktop feedback