Partager via


XAML Services

Cette rubrique décrit les fonctionnalités d’un ensemble de technologies appelé services XAML .NET. La majorité des services et API décrits se trouvent dans l’assembly System.Xaml. Les services incluent les lecteurs et les enregistreurs, les classes de schéma et la prise en charge du schéma, les fabriques, 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és de technologie spécifique, par exemple les fonctionnalités de personnalisation de build 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 spécifiquement sur l’utilisation des services XAML .NET qui sont activés dans la bibliothèque d’assemblys System.Xaml. La plupart de ces API sont destinées aux scénarios d’intégration et d’extensibilité du langage XAML. 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 en attribuant les 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, tel qu’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 de techniques de chargement d’assembly alternatives pour les sources de type de stockage ; utilisation de techniques de recherche de types connus au lieu de refléter toujours les assemblys ; utilisation 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 de Lookup ou de 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 vue d’ensemble XAML (WPF .NET). Cette rubrique traite du code XAML pour un public qui est nouveau à la fois dans WPF (Windows Presentation Foundation) 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 implémentation XAML spécifique au framework est une représentation système de type pour XAML. La représentation système de type présente le code XAML d’une 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 au moment de l’exécution de l’origine XAML ; il n’est pas limité par un système de type de stockage spécifique. Le système de type XAML inclut des représentations d’objet 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 des 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 graphique 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 tel qu’il est communiqué par le biais d’informations d’assembly dans le contexte et de la source du nœud XAML. Pour plus d’informations sur le concept de schéma XAML. consultez contexte de schéma XAML par défaut et le 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 la façon dont ce concept forme l’API et la terminologie. Le flux de nœuds XAML est un intermédiaire conceptuel entre une représentation du langage XAML et le graphique objet que le code XAML représente ou définit.

  • Un lecteur XAML est une entité qui traite XAML sous un certain format 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œud 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 graphique 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 un formulaire de balisage enregistré en tant que fichier texte). Le chargement xaml et la création d’un graphique d’objet 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é chemin d’accès d’enregistrement dans cette documentation.

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

  • Commencez par une représentation XAML, au format XML encodé en UTF et enregistré 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 à passer par le flux de nœud 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.

  • Le XamlObjectWriter écrit un graphique d’objet, un objet à la fois, conformément à la progression du 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 graphique objet.

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

  • Commencez par le graphique d’objet d’une durée d’exécution entière de l’application, le contenu de l’interface utilisateur et l’état d’une heure 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 de XamlObjectReader et de l’API XamlReader. L’opération la plus classique ici consiste à passer par le flux de nœud 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.

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

  • Appelez 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œud 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 charger un XmlReader, TextReader ou XamlReader qui encapsulent votre entrée XAML en chargeant avec les API de ce lecteur.

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

  • Transform convertit le code XAML en liant un chemin de chargement et un chemin d’enregistrement en une seule opération. Un contexte de schéma différent ou un système de type de stockage différent peut être utilisé pour XamlReader et XamlWriter, ce qui influence la façon dont le code XAML résultant est transformé.

Pour plus d’informations sur l’utilisation de 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 requises pour travailler avec un nœud individuel donné d’un flux de nœud 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 signalent les relations entre un XamlType et un XamlMember.

Le comportement par défaut du système de type XAML tel qu’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 de 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 d’instances, de types 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 tels que définis pour l’espace de noms XAML du langage XAML. Elles sont documentées sous forme de 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 fonctionnalités de langage de l’espace de noms XAML (x :).