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 writers XAML utilisent pour générer des composants de graphique d'objets. Bien qu'ils partagent certaines caractéristiques, les convertisseurs de types et les extensions de balisage sont représentés différemment dans un flux de nœud XAML. Dans ce jeu de documentation, les convertisseurs de type, les extensions de marques et les constructions similaires sont parfois désignés collectivement comme des convertisseurs de valeur.

Cette rubrique comprend les sections suivantes.

  • Convertisseurs de valeur
  • Convertisseurs de type
  • Extensions de balisage
  • Sérialiseurs de valeurs
  • Autres convertisseurs de valeur
  • Utilisation combinée des convertisseurs de types et des extensions de balisage
  • Contexte de service d'un convertisseur de valeurs
  • Rubriques connexes

Convertisseurs de valeur

En XAML, les convertisseurs de valeurs sont utilisés pour différents scénarios. Les différents types de convertisseurs de valeurs disponibles en XAML sont les suivants :

  • Convertisseur de type

  • Extension de balisage

  • Sérialiseur de valeurs

  • Classe connexe ou 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 Framework, les convertisseurs de types sont des classes qui dérivent de la classe TypeConverter CLR. TypeConverter est une classe qui se trouvait dans Microsoft .NET Framework lorsque le XAML n'existait pas. Sa fonction initiale consistait à prendre en charge des fenêtres de propriétés des des métaphores d'édition de texte similaires pour des propriétés d'un IDE. L'introduction de XAML dans le .NET Framework fait appel à TypeConverter pour convertir une syntaxe de texte (telle que celle figurant dans une valeur d'attribut ou un nœud de valeur XAML) en objet. TypeConverter peut également être employé pour sérialiser une valeur d'objet sous forme de syntaxe de texte. TypeConverter a également été utilisé dans les implémentations XAML antérieures spécifiques aux infrastructures dans Windows Presentation Foundation (WPF) et Windows Communication Foundation (WCF). Pour plus d'informations sur l'élément TypeConverter en XAML, consultezVue d'ensemble des convertisseurs de types pour XAML.

Extensions de balisage

Dans l'implémentation des services XAML .NET Framework, les extensions de balisage sont des classes qui dérivent de la classe MarkupExtension. Les extensions de balisage sont un concept qui, sous cette forme, provient du langage XAML. Vous pouvez penser qu'une extension de balisage s'apparente à un élément similaire à une séquence d'échappement extensible qui crée 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 l'accolade ouvrante ({) dans une chaîne de texte.

Les extensions de balisage diffèrent des convertisseurs de types. Les convertisseurs de types sont généralement associés à des types ou membres. Ils sont appelés lorsque la création d'un graphique d'objet ou une sérialisation rencontre une syntaxe de texte associée à ces entités.

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

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

RemarqueRemarque

Les types MarkupExtension et ValueSerializer se trouvent tous deux dans l'espace de noms System.Windows.Markup, et non pas dans System.Xaml.Cela n'implique pas que ces types soient spécifiques aux technologies WPF ou Windows Forms qui, sinon, remplissent les espaces de noms CLR contenant la chaîne Windows.MarkupExtension et ValueSerializer se trouvent dans l'assembly System.Xaml et n'ont aucune dépendance d'infrastructure spécifique.Ces types existaient dans l'espace de noms CLR pour .NET Framework 3.0 et restent dans cet espace de noms dans .NET Framework 4 de sorte que les références des projets WPF existants ne soient pas endommagées.Pour plus d'informations, consultez Types migrés de WPF vers System.Xaml.

Sérialiseurs de valeurs

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

Dans le système de type XAML, ainsi que pour les implémentations de writer XAML utilisant une 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 writers XAML qui exécutent la sérialisation est que si des propriétés XamlType.TypeConverter et XamlType.ValueSerializer existent, le convertisseur de type doit être utilisé pour le chemin de chargement et le sérialiseur de valeur doit être employé 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 valeur

Un convertisseur de valeurs est extensible au-delà des modèles spécifiques de convertisseurs de types ou d'extensions de balisage. Toutefois, cette personnalisation nécessite également la redéfinition du système de type XAML tel qu'il est fourni par les services XAML .NET Framework. Le système de type XAML existant comporte des représentations et des systèmes de signalement pour les convertisseurs de types, 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>.

Utilisation combinée des convertisseurs de types et des extensions de balisage

Les extensions de balisage et les convertisseurs de types sont utilisés pour différents cas en XAML. Bien que le contexte soit disponible pour les utilisations des extensions de balisage, le comportement de conversion de type des propriétés pour lesquelles une extension de balisage fournit une valeur n'est généralement pas vérifié dans les implémentations des extensions. 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 associé à cette chaîne tel qu'il est appliqué à une propriété ou un type de valeur de propriété spécifique n'est pas appelé. En général, la fonction d'une extension de balisage consiste à traiter une chaîne et retourner un objet sans faire appel à un convertisseur de type.

Contexte de service d'un convertisseur de valeurs

Lorsque vous implémentez un convertisseur de valeurs, vous devez généralement 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 que fournissent le contexte de schéma XAML et le writer d'objet XAML, etc. Pour plus d'informations sur les contextes de service disponibles pour un convertisseur de valeurs et pour savoir comment accéder aux services pouvant être fournis par un contexte de service, consultez Contextes de services disponibles aux convertisseurs de types ou aux extensions de balisage.

Voir aussi

Référence

MarkupExtension

XamlObjectWriter

Autres ressources

Vue d'ensemble des extensions de balisage pour XAML

Vue d'ensemble des convertisseurs de types pour XAML

Contextes de services disponibles aux convertisseurs de types ou aux extensions de balisage