Partager via


Génériques en XAML

Les services XAML .NET Framework, tels qu'ils sont implémentés dans System.Xaml, prennent en charge l'utilisation des types CLR génériques. Cette prise en charge inclut la spécification des contraintes de génériques en tant qu'argument de type et l'application de la contrainte par l'appel de la méthode Add appropriée pour les cas de collections génériques. Cette rubrique décrit divers aspects de l'utilisation et du référencement des types génériques en XAML.

x:TypeArguments

x:TypeArguments est une directive définie par le langage XAML. Lorsqu'elle est utilisée en tant que membre d'un type XAML stocké par un type générique, la directive x:TypeArguments passe les arguments de types contraints du générique au constructeur de stockage. Pour obtenir la syntaxe de référence relative à l'utilisation de x:TypeArguments par les services XAML .NET Framework, y compris des exemples de syntaxe, consultez x:TypeArguments, directive.

Étant donné que la directive x:TypeArguments accepte une chaîne et qu'elle est gérée par le convertisseur de type, elle est généralement déclarée en XAML en tant qu'attribut.

Dans le flux de nœud XAML, les informations déclarées par x:TypeArguments peuvent être obtenues à partir de XamlType.TypeArguments au niveau d'une position StartObject dans le flux de nœud. La valeur de retour de XamlType.TypeArguments est une liste de valeurs XamlType. Vous pouvez déterminer si un type XAML représente un type générique en appelant XamlType.IsGeneric.

Règles et conventions syntaxiques relatives aux génériques en XAML

En XAML, un type générique doit toujours être représenté comme un générique contraint ; un générique sans contrainte n'est jamais présent dans le système de type XAML ou un flux de nœud XAML, et ne peut pas être représenté dans le balisage XAML. Un générique peut être référencé dans la syntaxe d'attribut XAML s'il s'agit d'une contrainte de type imbriqué d'un générique référencé par x:TypeArguments, ou si x:Type fournit une référence de type CLR pour un type générique. Ce comportement est pris en charge par le biais de la classe XamlTypeTypeConverter définie par les services XAML .NET Framework.

Le format de syntaxe d'attribut XAML activé par XamlTypeTypeConverter modifie la convention syntaxique MSIL/CLR standard qui utilise les signes « inférieur à » et « supérieur à » pour les types et les contraintes de génériques, et substitue à la place de ces derniers des parenthèses pour le conteneur de contrainte. Pour obtenir un exemple, consultez x:TypeArguments, directive.

Génériques et fonctionnalités XAML 2009

Si vous utilisez le langage XAML 2009, vous pouvez employer des types intégrés XAML 2009 comme éléments d'informations dans x:TypeArguments au lieu de mapper les types de base CLR afin d'obtenir des types XAML pour les primitives associées au langage courant. Par exemple, vous pouvez déclarer les éléments suivants (les mappages de préfixes ne sont pas indiqués, mais x est l'espace de noms XAML du langage XAML 2009) :

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

Prise en charge des génériques dans WPF et d'autres infrastructures v3.5

Pour que vous puissiez utiliser XAML 2006 en ciblant spécifiquement WPF, l'attribut x:Class doit également être disponible sur le même élément comme x:TypeArguments et cet élément doit être l'élément racine d'un document XAML. L'élément racine doit être mappé à un type générique avec au moins un argument de type. C'est le cas notamment de PageFunction<T>.

Pour prendre en charge des utilisations génériques, les solutions possibles consistent notamment à définir une extension de balisage personnalisée pouvant retourner des types génériques ou à fournir une définition de classe de wrapper qui dérive d'un type générique, mais aplanit la contrainte générique dans sa propre définition de classe.

Dans WPF, lorsque vous ciblez .NET Framework 4, vous pouvez utiliser des fonctionnalités XAML 2009 avec x:TypeArguments, mais uniquement pour le langage XAML libre, dont le balisage n'est pas compilé. Le XAML compilé par balisage pour WPF et la forme de langage BAML de XAML ne prend actuellement pas en charge les mots clés et les fonctionnalités XAML 2009.

Les flux de travail personnalisés de Windows Workflow Foundation pour .NET Framework 3.5 ne prennent pas en charge l'utilisation du code XAML générique.

Voir aussi

Référence

x:TypeArguments, directive

x:Class, directive

Autres ressources

Types intégrés pour les primitives associées au langage XAML courant