Services XAML

Cette rubrique décrit les fonctionnalités d’un ensemble de technologies appelé services XAML .NET. La majorité des services et API décrits sont situés dans l’assembly System.Xaml. Les services incluent les lecteurs et les enregistreurs, les classes de schéma et les fabriques de prise en charge de schéma, l’attribution de classes, la prise en charge intrinsèque du langage XAML et d’autres fonctionnalités de langage XAML.

À propos de cette documentation

La documentation conceptuelle pour les services XAML .NET suppose que vous avez une expérience précédente avec le langage XAML et comment il peut s’appliquer à une infrastructure spécifique, par exemple Windows Presentation Foundation (WPF) ou Windows Workflow Foundation, ou une zone de fonctionnalité technologique spécifique, par exemple les fonctionnalités de génération dans Microsoft.Build.Framework.XamlTypes. Cette documentation ne tente pas d’expliquer les principes de base du code XAML en tant que langage de balisage, terminologie de syntaxe XAML ou autre matériel d’introduction. Au lieu de cela, cette documentation se concentre sur l’utilisation spécifique des services XAML .NET activés dans la bibliothèque d’assemblys System.Xaml. La plupart de ces API sont destinées aux scénarios d’intégration du langage XAML et d’extensibilité. Cela peut inclure l’un des scénarios suivants :

  • Extension des fonctionnalités des lecteurs XAML de base ou des enregistreurs XAML (traitement du flux de nœud XAML directement; dérivant votre propre lecteur XAML ou enregistreur XAML).

  • Définition de types personnalisés utilisables en XAML qui n’ont pas de dépendances d’infrastructure spécifiques et attribut des types pour transmettre leurs caractéristiques système de type XAML aux services XAML .NET.

  • Hébergement de lecteurs XAML ou d’enregistreurs XAML en tant que composant d’une application, comme un concepteur visuel ou un éditeur interactif pour les sources de balisage XAML.

  • Écriture de convertisseurs de valeurs XAML (extensions de balisage; convertisseurs de types pour les types personnalisés).

  • Définition d’un contexte de schéma XAML personnalisé (à l’aide d’autres techniques de chargement d’assembly pour les sources de type de stockage ; à l’aide de techniques de recherche de types connus au lieu de refléter toujours des assemblys; à l’aide de concepts d’assembly chargés qui n’utilisent pas le common language runtime (CLR) AppDomain et son modèle de sécurité associé).

  • Extension du système de type XAML de base.

  • Utilisation des techniques Lookup ou Invoker pour influencer le système de type XAML et la façon dont les sauvegardes de type sont évaluées.

Si vous recherchez du matériel d’introduction sur XAML en tant que langage, vous pouvez essayer la vue d’ensemble XAML (WPF .NET). Cette rubrique traite du code XAML pour un public qui est nouveau à Windows Presentation Foundation (WPF) et à l’utilisation des fonctionnalités de balisage XAML et de langage XAML. Un autre document utile est le matériel d’introduction dans la spécification du langage XAML.

Services XAML .NET et System.Xaml dans l’architecture .NET

Les services XAML .NET et l’assembly System.Xaml définissent une grande partie de ce qui est nécessaire pour prendre en charge les fonctionnalités de langage XAML. Cela inclut des classes de base pour les lecteurs XAML et les enregistreurs XAML. La fonctionnalité la plus importante ajoutée aux services XAML .NET qui n’était présente dans aucune des implémentations XAML spécifiques à l’infrastructure est une représentation système de type pour XAML. La représentation du système de type présente XAML de manière orientée objet qui se concentre sur les fonctionnalités XAML sans prendre de dépendances sur des fonctionnalités spécifiques des frameworks.

Le système de type XAML n’est pas limité par le formulaire de balisage ou les spécificités d’exécution de l’origine XAML ; ni n’est-il limité par n’importe quel système de type de stockage spécifique. Le système de type XAML inclut des représentations d’objets pour les types, les membres, les contextes de schéma XAML, les concepts au niveau XML et d’autres concepts de langage XAML ou intrinsèques XAML. L’utilisation ou l’extension du système de type XAML permet de dériver de classes telles que les lecteurs XAML et les enregistreurs XAML, et d’étendre les fonctionnalités des représentations XAML dans des fonctionnalités spécifiques activées par une infrastructure, une technologie ou une application qui consomme ou émet du code XAML. Le concept d’un contexte de schéma XAML permet d’effectuer des opérations d’écriture de graphe d’objets pratiques à partir de la combinaison d’une implémentation d’enregistreur d’objets XAML, du système de type de stockage d’une technologie comme communiqué par le biais d’informations d’assembly dans le contexte et de la source de nœud XAML. Pour plus d’informations sur le concept de schéma XAML. Consultez Contexte de schéma XAML par défaut et contexte de schéma XAML WPF.

Flux de nœuds XAML, lecteurs XAML et enregistreurs XAML

Pour comprendre le rôle que les services XAML .NET jouent dans la relation entre le langage XAML et les technologies spécifiques qui utilisent XAML comme langage, il est utile de comprendre le concept d’un flux de nœuds XAML et comment ce concept forme l’API et la terminologie. Le flux de nœuds XAML est un intermédiaire conceptuel entre une représentation de langage XAML et le graphique d’objets que le code XAML représente ou définit.

  • Un lecteur XAML est une entité qui traite XAML sous un certain forme et produit un flux de nœuds XAML. Dans l’API, un lecteur XAML est représenté par la classe de base XamlReader.

  • Un enregistreur XAML est une entité qui traite un flux de nœuds XAML et produit quelque chose d’autre. Dans l’API, un enregistreur XAML est représenté par la classe de base XamlWriter.

    Les deux scénarios les plus courants impliquant XAML chargent XAML pour instancier un graphe d’objet et enregistrer un graphique d’objet à partir d’une application ou d’un outil et produire une représentation XAML (généralement dans le formulaire de balisage enregistré en tant que fichier texte). Le chargement XAML et la création d’un graphe d’objets sont souvent appelés chemin d’accès de chargement dans cette documentation. L’enregistrement ou la sérialisation d’un graphique objet existant en XAML est souvent appelé dans cette documentation comme chemin d’enregistrement.

    Le type de chemin de chargement le plus courant peut être décrit comme suit :

  • Commencez par une représentation XAML, au format XML codé en UTF et enregistrées en tant que fichier texte.

  • Chargez ce code XAML dans XamlXmlReader. XamlXmlReader est une sous-classe XamlReader.

  • Le résultat est un flux de nœuds XAML. Vous pouvez accéder à des nœuds individuels du flux de nœuds XAML à l’aide de l’API XamlXmlReader / XamlReader. L’opération la plus classique ici consiste à parcourir le flux de nœuds XAML, en traitant chaque nœud à l’aide d’une métaphore « enregistrement actuel ».

  • Transmettez les nœuds résultants du flux de nœuds XAML à une API XamlObjectWriter. XamlObjectWriter est une sous-classe XamlWriter.

  • L’objet XamlObjectWriter écrit un graphique d’objet, un objet à la fois, conformément à la progression via le flux de nœud XAML source. L’écriture d’objets est effectuée à l’aide d’un contexte de schéma XAML et d’une implémentation qui peut accéder aux assemblys et aux types d’un système et d’une infrastructure de type de stockage.

  • Appelez Result à la fin du flux de nœuds XAML pour obtenir l’objet racine du graphe d’objets.

    Le type de chemin d’enregistrement le plus courant peut être décrit comme suit :

  • Commencez par le graphique d’objets d’une durée d’exécution d’une application entière, le contenu et l’état de l’interface utilisateur d’une durée d’exécution ou un segment plus petit de la représentation d’objet d’une application globale au moment de l’exécution.

  • À partir d’un objet de démarrage logique, tel qu’une racine d’application ou une racine de document, chargez les objets dans XamlObjectReader. XamlObjectReader est une sous-classe XamlReader.

  • Le résultat est un flux de nœuds XAML. Vous pouvez accéder à des nœuds individuels du flux de nœuds XAML à l’aide des API XamlObjectReader et XamlReader. L’opération la plus classique ici consiste à parcourir le flux de nœuds XAML, en traitant chaque nœud à l’aide d’une métaphore « enregistrement actuel ».

  • Transmettez les nœuds résultants du flux de nœuds XAML à une API XamlXmlWriter. XamlXmlWriter est une sous-classe XamlWriter.

  • XamlXmlWriter écrit XAML dans un encodage UTF XML. Vous pouvez enregistrer ce fichier en tant que fichier texte, sous forme de flux ou dans d’autres formulaires.

  • Appel Flush pour obtenir la sortie finale.

Pour plus d’informations sur les concepts de flux de nœuds XAML, consultez Présentation des structures et concepts de flux de nœuds XAML.

Classe XamlServices

Il n’est pas toujours nécessaire de traiter un flux de nœuds XAML. Si vous souhaitez un chemin de chargement de base ou un chemin d’enregistrement de base, vous pouvez utiliser des API dans la classe XamlServices.

  • Différentes signatures de Load implémentent un chemin de chargement. Vous pouvez charger un fichier ou un flux, ou bien encore un XmlReader, un TextReaderou un XamlReader qui inclut dans un wrapper votre entrée XAML en procédant au chargement avec les API de ce lecteur.

  • Différentes signatures de Save enregistrent un graphique d’objet et produisez une sortie sous forme de flux, de fichier ou d’instance XmlWriter/TextWriter.

  • Transform convertit le XAML en associant un chemin de chargement et un chemin d'enregistrement dans le cadre d'une seule opération. Un contexte de schéma ou un système de types de stockage différent peut être utilisé pour XamlReader et XamlWriter, ce qui est l'élément qui influence le mode de transformation du code XAML obtenu.

Pour plus d’informations sur l’utilisation XamlServices, consultez Classe XAMLServices et la lecture ou l’écriture XAML de base.

Système de type XAML

Le système de type XAML fournit les API nécessaires pour travailler avec un nœud individuel donné d’un flux de nœuds XAML.

XamlType est la représentation d’un objet : ce que vous traitez entre un nœud d’objet de début et un nœud d’objet final.

XamlMember est la représentation d’un membre d’un objet : ce que vous traitez entre un nœud membre de début et un nœud membre final.

Les API telles que GetAllMembers et GetMember et DeclaringType rapportent les relations entre un XamlType et XamlMember.

Le comportement par défaut du système de type XAML implémenté par les services XAML .NET est basé sur le Common Language Runtime (CLR) et l’analyse statique des types CLR dans les assemblys à l’aide de la réflexion. Par conséquent, pour un type CLR spécifique, l’implémentation par défaut du système de type XAML peut exposer le schéma XAML de ce type et ses membres et le signaler en termes de système de type XAML. Dans le système de type XAML par défaut, le concept d’assignabilité des types est mappé à l’héritage CLR, et les concepts des instances, des types de valeur, et ainsi de suite, sont également mappés aux comportements et fonctionnalités de prise en charge du CLR.

Informations de référence sur les fonctionnalités du langage XAML

Pour prendre en charge XAML, les services XAML .NET fournissent une implémentation spécifique des concepts de langage XAML définis pour l’espace de noms XAML du langage XAML. Celles-ci sont documentées en tant que pages de référence spécifiques. Les fonctionnalités de langage sont documentées du point de vue de la façon dont ces fonctionnalités de langage se comportent lorsqu’elles sont traitées par un lecteur XAML ou un enregistreur XAML défini par les services XAML .NET. Pour plus d'informations, consultez XAML Namespace (x:) Language Features.