Partager via


Génériques en XAML

Les services XAML .NET, comme implémentés, prennent en System.Xaml 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 appropriée Add 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 x:TypeArgumentsservices XAML .NET, qui inclut des exemples de syntaxe, consultez la 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 d’une XamlType.TypeArgumentsStartObject position dans le flux de nœud. La valeur de retour est XamlType.TypeArguments une liste de XamlType valeurs. Détermination de savoir 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 XamlTypeTypeConverter classe définie par les services XAML .NET.

Le formulaire de syntaxe d’attribut XAML activé en XamlTypeTypeConverter modifiant 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 la 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 des types intégrés XAML 2009 comme é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 il s’agit de 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 du code XAML ne prennent actuellement pas en charge les mots clés et les 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