Partager via


Génériques en XAML

Les services XAML .NET implémentés dans System.Xaml prennent en charge l’utilisation de types CLR génériques. Cette prise en charge inclut la spécification des contraintes des génériques en tant qu’argument de type et l’application de la contrainte en appelant la méthode Add appropriée pour les cas de collection générique. Cette rubrique décrit les aspects de l’utilisation et du référencement de types génériques en XAML.

x :TypeArguments

x:TypeArguments est une directive définie par le langage XAML. Lorsqu’il est utilisé en tant que membre d’un type XAML soutenu par un type générique, x:TypeArguments transmet les arguments de type du générique au constructeur de stockage. Pour obtenir une syntaxe de référence relative à l’utilisation des services XAML .NET de x:TypeArguments, qui inclut des exemples de syntaxe, consultez directive x :TypeArguments.

Étant donné que x:TypeArguments prend une chaîne et a un stockage de convertisseur de type, il est généralement déclaré dans l’utilisation XAML en tant qu’attribut.

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

Conventions de règles et de syntaxe pour les génériques en XAML

En XAML, un type générique doit toujours être représenté en tant que générique limité. Un générique non contraint n’est jamais présent dans le système de type XAML ou un flux de nœuds 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 pour les cas où il s’agit d’une contrainte de type imbriquée d’un générique référencé par x:TypeArguments, ou pour les cas où x:Type fournit une référence de type CLR pour un type générique. Le référencement des génériques est pris en charge par le biais de la classe XamlTypeTypeConverter définie par les services XAML .NET.

Le formulaire de syntaxe d’attribut XAML activé par XamlTypeTypeConverter modifie la convention de syntaxe MSIL/CLR classique qui utilise des crochets angle pour les types et les contraintes des génériques, et remplace plutôt les parenthèses du conteneur de contraintes. Pour obtenir un exemple, consultez directive x :TypeArguments.

Fonctionnalités génériques et XAML 2009

Si vous utilisez XAML 2009 au lieu de mapper les types de base CLR pour obtenir des types XAML pour les primitives de langage commun, vous pouvez utiliser types intégrés XAML 2009 en tant qu’éléments d’informations dans x:TypeArguments. Par exemple, vous pouvez déclarer ce qui suit (mappages de préfixes non affichés, mais x est l’espace de noms XAML du langage XAML pour XAML 2009) :

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

Prise en charge des génériques dans WPF

Pour l’utilisation de XAML 2006 lors du ciblage spécifique de WPF, x :Class doit également être fourni sur le même élément que x:TypeArguments, et cet élément doit être l’élément racine dans un document XAML. L’élément racine doit être mappé à un type générique avec au moins un argument de type. Par exemple, PageFunction<T>.

Les solutions de contournement possibles pour prendre en charge les utilisations génériques incluent la définition d’une extension de balisage personnalisée qui peut retourner des types génériques ou la fourniture d’une définition de classe de wrapping qui dérive d’un type générique, mais aplatit la contrainte générique dans sa propre définition de classe.

Dans WPF, vous pouvez utiliser des fonctionnalités XAML 2009 avec x:TypeArguments, mais uniquement pour xaml libre (XAML qui n’est pas compilé par balisage). Le code XAML compilé par balisage pour WPF et la forme BAML de XAML ne prennent pas actuellement en charge les mots clés et fonctionnalités XAML 2009.

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

Voir aussi