Convertisseurs de types et extensions de balisage pour XAML

Les convertisseurs de type et les extensions de balisage sont deux techniques que les systèmes de type XAML et les writers XAML utilisent pour générer des composants de graphique 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 type, les extensions de balisage et les constructions similaires sont parfois désignés collectivement sous le nom de « convertisseurs de valeurs ».

Convertisseurs de valeurs

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

  • Convertisseur de type

  • Extension de balisage

  • Sérialiseur de valeur

  • Classe connexe ou classe de prise en charge qui fournit la logique pour une syntaxe de texte XAML

Convertisseurs de type

Dans la définition des services XAML .NET, les convertisseurs de type sont des classes qui dérivent de la classe CLR TypeConverter . 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 peut également être utilisée 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 le TypeConverter en XAML, consultez Type Converters for XAML Overview.

Extensions de balisage

Dans l’implémentation des services XAML .NET, les extensions de balisage sont des classes qui dérivent de la MarkupExtension classe. Les extensions de balisage sont un concept qui, sous cette forme, provient du langage XAML. Vous pouvez considérer qu'une extension de balisage s'apparente à une séquence d'échappement extensible qui effectue des appels dans une classe de service pour fournir sa logique. Quant au 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 type sont généralement associés à des types ou à des membres. Ils sont appelés lors de la création d'un graphique d'objets ou quand 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 toute valeur de 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. Ou vous pouvez les utiliser pour spécifier une valeur d'attribut pour les membres qui, sans cela, ne prendrait pas en charge une syntaxe de texte.

Pour plus d’informations sur le modèle d’implémentation d’extensions de balisage pour XAML, consultez Markup Extensions for XAML Overview.

Sérialiseurs de valeur

Un ValueSerializer est un convertisseur de type spécialisé qui est optimisé pour la conversion d'un objet en chaîne. Il est possible qu'un ValueSerializer pour XAML n'implémente pas du tout la méthode ConvertFrom . Une implémentation de ValueSerializer obtient des services d'une manière qui ressemble à une implémentation de TypeConverter . Les méthodes virtuelles fournissent un paramètre d'entrée context . 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 de writer XAML utilisant un traitement des boucles de nœud XAML pour la sérialisation, un convertisseur de valeurs qui est associé à un type ou à un membre est signalé par sa propre propriété XamlType.ValueSerializer . Pour les writers XAML qui effectuent la sérialisation, cela signifie que s'il existe une propriété XamlType.TypeConverter et une propriété XamlType.ValueSerializer , 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 a la valeur null, le convertisseur de type est également utilisé pour le chemin d'enregistrement.

Autres convertisseurs de valeurs

Un convertisseur de valeurs 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 a des représentations et des systèmes de création de rapports pour les convertisseurs de type, les extensions de balisage et les sérialiseurs de valeurs, mais pas pour les formes personnalisées de conversion de valeurs. Si vous souhaitez créer des convertisseurs de valeurs personnalisés, utilisez le type XamlValueConverter<TConverterBase> .

Convertisseurs de type et extensions de balisage pour XAML

Les extensions de balisage et les convertisseurs de type sont utilisés pour des situations différentes en XAML. Bien que le contexte soit disponible pour les extensions de balisage, le comportement de la 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 comme sortie de ProvideValue , le comportement de la conversion de type sur cette chaîne tel qu'appliqué à une propriété ou à un type de valeur de propriété spécifique n'est pas appelé. En général, le but d'une extension de balisage est de traiter une chaîne et de retourner un objet sans qu'aucun convertisseur de type ne soit 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 valeurs 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 services disponibles pour un convertisseur de valeurs et pour savoir comment accéder aux services pouvant être fournis par un contexte de service, consultez Service Contexts Available to Type Converters and Markup Extensions.

Voir aussi