Partager via


Convertisseurs de types et extensions de balisage pour XAML

Les convertisseurs de types et les extensions de balisage sont deux techniques que les systèmes de type XAML et les enregistreurs XAML utilisent pour générer des composants de graphe d’objets. Bien qu’ils partagent certaines caractéristiques, les convertisseurs de type et les extensions de balisage sont représentés différemment dans un flux de nœud XAML. Dans cet ensemble de documentation, les convertisseurs de types, les extensions de balisage et les constructions similaires sont parfois collectivement appelés convertisseurs de valeur.

Convertisseurs de valeurs

En XAML, les convertisseurs de valeurs sont utilisés pour différents scénarios. La liste suivante montre les différents types de convertisseurs de valeur en XAML :

  • Convertisseur de type

  • Extension de balisage

  • Sérialiseur de valeurs

  • Classe ou classe de prise en charge associée qui fournit la logique d’une syntaxe de texte XAML

Convertisseurs de types

Dans la définition des services XAML .NET, les convertisseurs de type sont des classes qui dérivent de la classe TypeConverter CLR. TypeConverter est une classe qui était dans .NET avant que XAML n’existait. Son objectif d’origine était de prendre en charge les fenêtres de propriétés et les métaphores d’édition de texte similaires pour les propriétés de l’IDE. L’introduction de XAML à .NET utilise TypeConverter pour convertir une syntaxe de texte (comme indiqué dans une valeur d’attribut ou un nœud de valeur XAML) en objet. TypeConverter pouvez également être utilisé pour sérialiser une valeur d’objet en syntaxe de texte. TypeConverter a également été utilisé dans les implémentations XAML spécifiques à l’infrastructure précédentes dans Windows Presentation Foundation (WPF) et Windows Communication Foundation (WCF). Pour plus d’informations sur les TypeConverter en XAML, consultez Vue d’ensemble des convertisseurs de types pour XAML.

Extensions de balisage

Dans l’implémentation des services XAML .NET, les extensions de balisage sont des classes qui dérivent de la classe MarkupExtension. Les extensions de balisage sont un concept qui, dans ce formulaire, provient du langage XAML. Vous pouvez considérer une extension de balisage comme une séquence d’échappement extensible qui appelle une classe de service pour fournir sa logique. En termes de balisage, les processeurs XAML reconnaissent universellement une extension de balisage par une séquence de texte qui commence par une accolade ouvrante ({) dans une chaîne de texte.

Les extensions de balisage diffèrent des convertisseurs de type. Les convertisseurs de types sont généralement associés à des types ou des membres. Elles sont appelées lorsqu’une création de graphique d’objet ou une sérialisation rencontre une syntaxe de texte associée à ces entités.

Les extensions de balisage sont associées à une seule classe de service de prise en charge, mais peuvent être appliquées pour n’importe quelle valeur membre. (Toutefois, vous pouvez implémenter votre extension de balisage pour restreindre délibérément son utilisation à certains membres ou types de destination, à l’aide du contexte de service.) Les extensions de balisage peuvent remplacer une association de convertisseur de types. Vous pouvez également les utiliser pour spécifier une valeur d’attribut pour les membres qui ne prennent pas en charge une syntaxe de texte.

Pour plus d’informations sur le modèle d’implémentation d’extension de balisage pour XAML, consultez Vue d’ensemble des extensions de balisage pour XAML.

Sérialiseurs de valeurs

Un ValueSerializer est un convertisseur de type spécialisé optimisé pour convertir un objet en chaîne. Une ValueSerializer pour XAML peut ne pas implémenter la méthode ConvertFrom du tout. Une implémentation ValueSerializer obtient des services d’une manière semblable à une implémentation TypeConverter. Les méthodes virtuelles fournissent un paramètre de context d’entrée. Le paramètre context est de type IValueSerializerContext, qui hérite de l’interface IServiceProvider et a une méthode GetService.

Dans le système de type XAML et pour les implémentations d’enregistreur XAML qui utilisent le traitement de boucle de nœud XAML pour la sérialisation, un convertisseur de valeurs associé à un type ou un membre est signalé par sa propre propriété XamlType.ValueSerializer. La signification pour les enregistreurs XAML qui effectuent la sérialisation est que si un XamlType.TypeConverter et un XamlType.ValueSerializer existent, le convertisseur de type doit être utilisé pour le chemin de chargement et le sérialiseur de valeur doit être utilisé pour le chemin d’enregistrement. Si XamlType.TypeConverter existe mais que XamlType.ValueSerializer est null, le convertisseur de type est également utilisé pour le chemin d’enregistrement.

Autres convertisseurs de valeurs

Un convertisseur de valeur est extensible au-delà des modèles spécifiques d’un convertisseur de type ou d’une extension de balisage. Toutefois, cette personnalisation nécessite également la redéfinition du système de type XAML fourni par les services XAML .NET. Le système de type XAML existant comporte des représentations et des systèmes de création de rapports pour les convertisseurs de types, les extensions de balisage et les sérialiseurs de valeur, mais pas pour les formes personnalisées de conversion de valeur. Si vous souhaitez créer des convertisseurs de valeur personnalisés, utilisez le type de XamlValueConverter<TConverterBase>.

Convertisseurs de types et extensions de balisage en combinaison

Les extensions de balisage et les convertisseurs de type sont utilisés pour différentes situations en XAML. Bien que le contexte soit disponible pour les utilisations d’extensions de balisage, le comportement de conversion de type des propriétés où une extension de balisage fournit une valeur n’est généralement pas vérifié dans les implémentations d’extension de balisage. En d’autres termes, même si une extension de balisage retourne une chaîne de texte en tant que sortie ProvideValue, le comportement de conversion de type sur cette chaîne appliqué à un type de propriété ou valeur de propriété spécifique n’est pas appelé. En règle générale, l’objectif d’une extension de balisage est de traiter une chaîne et de retourner un objet sans convertisseur de type impliqué.

Contexte de service pour un convertisseur de valeurs

Lorsque vous implémentez un convertisseur de valeurs, vous devez souvent accéder à un contexte dans lequel le convertisseur de valeur est appliqué. Ce contexte est appelé contexte de service. Le contexte de service peut inclure des informations telles que le contexte de schéma XAML actif, l’accès au système de mappage de type fourni par le contexte de schéma XAML et l’enregistreur d’objets XAML, etc. Pour plus d’informations sur les contextes de service disponibles pour un convertisseur de valeurs et sur la façon d’accéder aux services qu’un contexte de service peut fournir, consultez contextes de service disponibles pour les convertisseurs de types et les extensions de balisage.

Voir aussi