Partage via


XamlReader Classe

Définition

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
Héritage
XamlReader

Exemples

L’exemple suivant convertit un Button en chaîne à l’aide de la XamlWriter classe . La chaîne est ensuite rechargée dans un Button à l’aide de la méthode statique Load sur la XamlReader classe .

// Create the Button.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";

// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);

// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
' Create the Button.
Dim originalButton As New Button()
originalButton.Height = 50
originalButton.Width = 100
originalButton.Background = Brushes.AliceBlue
originalButton.Content = "Click Me"

' Save the Button to a string.
Dim savedButton As String = XamlWriter.Save(originalButton)

' Load the button
Dim stringReader As New StringReader(savedButton)
Dim xmlReader As XmlReader = XmlReader.Create(stringReader)
Dim readerLoadButton As Button = CType(XamlReader.Load(xmlReader), Button)

Remarques

Les méthodes synchrones Load sont statiques, mais les méthodes asynchrones LoadAsync ne sont pas statiques et nécessitent une instance de la XamlReader classe à utiliser.

La sortie des Load méthodes est un objet unique, qui représente l’objet racine d’une arborescence d’objets ou d’un graphique d’objets créé. Les graphiques d’objets créés par XamlReader sont généralement ajoutés à l’arborescence d’objets existante d’une application WPF au moment de l’exécution. Sinon, le nouveau graphique d’objets est considéré comme déconnecté aux fins du modèle d’application WPF. Cela signifie qu’il ne s’affiche pas et qu’il n’est pas accessible à l’aide des techniques d’arborescence d’objets appliquées à l’arborescence d’objets main de l’application WPF (par exemple, les API FindName, LogicalTreeHelper, VisualTreeHelper). Pour plus d’informations sur les concepts d’arborescence d’objets, consultez Arborescences dans WPF.

XamlReader prend en charge les scénarios principaux suivants :

  • Clonage/fabrique d’objets : sans mécanismes supplémentaires, un type de référence ne peut généralement pas être inclus dans plusieurs positions dans une arborescence d’objets WPF. (Les exemples de mécanismes supplémentaires qui offrent la prise en charge du partage ou de la réutilisation dans WPF incluent des objets basés sur Freezable, ou la prise en charge d’objets couramment partageables tels Brush que ceux qui sont référencés en tant qu’élément à partir d’un ResourceDictionary.) Une façon de cloner un objet qui se trouve déjà dans l’arborescence d’objets consiste à sérialiser l’objet à l’aide XamlWriter.Savede . Vous utilisez ensuite la chaîne sérialisée comme entrée pour un appel à Load, avec un flux ou XmlReader comme intermédiaire.

  • Construction d’objets sur la base d’informations juste-à-temps : il existe souvent d’autres façons de faire en sorte que la liaison tardive ou l’entrée fournie par l’utilisateur modifie l’état des objets existants. Par exemple, vous pouvez utiliser la même valeur pour définir plusieurs propriétés ou utiliser la liaison de données. Mais si vous avez un scénario où même le type d’objet à créer n’est déterminable qu’au moment de l’exécution ou avec l’interaction de l’utilisateur, la création d’un tel objet en créant une chaîne pour Load l’entrée est souvent une technique utile.

  • Utilisation de techniques de ressources existantes : le Stream type est fréquemment utilisé dans d’autres frameworks ou technologies pour transférer des données ou des objets entre les limites de l’application ou dans des situations similaires. Vous pouvez ensuite utiliser les Stream techniques pour stocker ou obtenir des données au format XAML que vous utilisez éventuellement pour créer un objet dans le cadre de votre application.

  • Documents corrigés : Votre application peut charger des documents XPS locaux ou téléchargés pour les inclure dans une arborescence d’objets d’application WPF et dans l’interface utilisateur.

Notes

Cette documentation décrit parfois un graphique d’objets, par opposition à une arborescence d’objets. Une relation parent-enfant stricte n’existe pas toujours dans les relations d’objet d’exécution d’une application WPF au moment de l’exécution. Par conséquent, un graphe d’objets est une terminologie plus largement applicable. Toutefois, étant donné que WPF inclut également deux API de conceptualisation d’arborescence différentes (LogicalTreeHelper, VisualTreeHelper), la métaphore d’arborescence s’applique toujours correctement à la plupart des cas réels dans WPF. Du point de vue du langage XAML, cependant, le graphe d’objets est souvent le meilleur moyen de réfléchir à la façon dont les objets sont créés à partir du XAML, car le langage XAML lui-même ne spécifie pas nécessairement les méthodologies de classe d’assistance qui apportent à nouveau les relations dans une arborescence.

Sécurité de l’accès au code, XAML libre et XamlReader

Le XAML est un langage de balisage qui représente directement l’instanciation d’objets et leur exécution. Ainsi, les éléments créés en XAML ont la même capacité d’interagir avec les ressources système (accès réseau, e/s de système de fichiers, par exemple) que le code généré équivalent.

WPF prend en charge la sécurité du code d’accès (CAS) de l’infrastructure de sécurité .NET. Cela signifie que le contenu WPF en cours d’exécution dans la zone Internet a des autorisations d’exécution réduites. « XAML libre » (pages de XAML noncompilés interprétés au moment du chargement par une visionneuse XAML) et application de navigateur XAML (XBAP) sont généralement exécutés dans cette zone Internet et utilisent le même jeu d’autorisations. Toutefois, le XAML chargé dans une application d’un niveau de confiance totale dispose du même accès aux ressources système que l’application d’hébergement. Pour plus d’informations, consultez Sécurité de confiance partielle de WPF.

Les implications de ces instructions pour XamlReader est que la conception de votre application doit prendre des décisions d’approbation concernant le XAML que vous décidez de charger. Si vous chargez du code XAML non approuvé, envisagez d’implémenter votre propre technique de bac à sable pour la façon dont vous chargez le graphe d’objets résultant.

XamlReader peut également être appelé par du code d’approbation partielle. Dans ce cas, la zone de sécurité Internet est appliquée pour la sécurité d’accès au code. Si un élément du code XAML chargé n’est pas valide dans la zone de sécurité Internet, une exception d’analyse XAML est levée. Sous XBAP et d’autres cas d’approbation partielle au niveau de la plateforme, où XamlReader fait partie de l’exécution, vous obtenez le même comportement d’exception qu’avec les appels d’approbation partielle explicites.

XAML WPF, lecteurs/rédacteurs XAML et contrôle de version du langage XAML

XAML2009 inclut des fonctionnalités de langage telles que x :Reference et x :FactoryMethod. Vous pouvez utiliser des signatures de ou Parse pour charger du Load CODE XAML qui utilise ces fonctionnalités. Toutefois, ces fonctionnalités de langage ne sont pas prises en charge pour xaml qui doit être compilé (comme XAML pour l’action de génération de page dans une application WPF, ou tout XAML qui implique la tâche de compilation de balisage dans les actions de génération).

Les types WPF et la technologie WPF en général prennent en charge les concepts qui reposent sur l’accès aux éléments internes WPF. Par instance, la façon dont WPF implémente les propriétés de dépendance s’appuie sur des techniques internes pour une recherche de membre de type efficace. L’accès à ces éléments internes est activé par les API de lecture et d’écriture XAML fournies dans XamlWriter et XamlReader à partir de l’espace de noms et de l’assembly System.Windows.Markup PresentationFramework. Toutefois, les lecteurs XAML de niveau inférieur et les enregistreurs XAML de l’assembly System.Xaml (classes basées sur System.Xaml.XamlReader, System.Xaml.XamlWriter) n’ont pas accès aux éléments internes WPF. Il n’existe aucune dépendance entre System.Xaml et un assembly spécifique à WPF. Sans accès aux éléments internes WPF, les lecteurs et les rédacteurs System.Xaml ne peuvent pas charger ou enregistrer correctement tous les types WPF, ou les types basés sur des types WPF. En particulier, les lecteurs et les rédacteurs System.Xaml ne comprennent pas les concepts tels que le magasin de propriétés de sauvegarde de la propriété de dépendance WPF, ni tous les détails de la façon dont WPF utilise les styles, les dictionnaires de ressources et les modèles. Par conséquent, vous avez le choix à faire :

  • Si vous chargez des types WPF et/ou si vous utilisez XAML au format BAML de quelque manière que ce soit, utilisez les lecteurs XAML PresentationFramework et les enregistreurs XAML.

  • Si vous ne vous fiez à aucun type WPF ou à la forme BAML de XAML et que vous n’utilisez pas le lecteur XAML ou l’implémentation d’un enregistreur XAML d’une autre technologie spécifique pour des raisons spécifiques à cette infrastructure, utilisez les lecteurs XAML System.Xaml et les enregistreurs XAML.

Implémentation de la sauvegarde System.Xaml dans .NET 4

XamlReader est la surface d’API appelante pour l’analyseur XAML au niveau de l’infrastructure WPF. Le même analyseur XAML sous-jacent effectue également le chargement et l’analyse XAML au moment de l’exécution pour les applications WPF qui ciblent .NET Framework 3.0 et .NET Framework 3.5.

Si vous ciblez .NET Framework 4, l’API externe est la même, mais certaines parties de l’implémentation sont basées sur l’implémentation XAML générale de .NET Framework 4 dans l’assembly System.Xaml, ce qui améliore de nombreux aspects techniques et de création de rapports de l’analyse XAML. Le ciblage de .NET Framework 4 implique nécessairement d’inclure System.Xaml comme référence, et les détails de l’implémentation, tels que les exceptions signalées, peuvent provenir de types définis par System.Xaml.

Constructeurs

XamlReader()

Initialise une nouvelle instance de la classe XamlReader.

Méthodes

CancelAsync()

Abandonne l'opération de chargement asynchrone actuelle, si une opération de ce type est en attente.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
GetWpfSchemaContext()

Retourne un objet XamlSchemaContext qui représente les paramètres de contexte de schéma WPF pour un XamlReader.

Load(Stream)

Lit l'entrée XAML dans le Stream spécifié et retourne un Object qui est la racine de l'arborescence de l'objet correspondant.

Load(Stream, Boolean)

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

Load(Stream, ParserContext)

Lit l'entrée XAML dans le Stream spécifié et retourne un objet qui est la racine de l'arborescence de l'objet correspondant.

Load(Stream, ParserContext, Boolean)

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

Load(XamlReader)

Lit l'entrée XAML via le XamlReader fourni et retourne un objet qui est la racine de l'arborescence de l'objet correspondant.

Load(XmlReader)

Lit l'entrée XAML dans le XmlReader spécifié et retourne un objet qui est la racine de l'arborescence de l'objet correspondant.

Load(XmlReader, Boolean)

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

LoadAsync(Stream)

Lit l'entrée XAML dans le Stream spécifié et retourne la racine de l'arborescence de l'objet correspondant.

LoadAsync(Stream, Boolean)

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

LoadAsync(Stream, ParserContext)

Lit l'entrée XAML dans le Stream spécifié et retourne la racine de l'arborescence de l'objet correspondant.

LoadAsync(Stream, ParserContext, Boolean)

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

LoadAsync(XmlReader)

Lit l'entrée XAML dans le XmlReader spécifié et retourne la racine de l'arborescence de l'objet correspondant.

LoadAsync(XmlReader, Boolean)

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
Parse(String)

Lit l'entrée XAML dans la chaîne de texte spécifiée et retourne un objet qui correspond à la racine du balisage indiqué.

Parse(String, Boolean)

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

Parse(String, ParserContext)

Lit le balisage XAML dans la chaîne de texte spécifiée (à l'aide d'un ParserContext spécifié) et retourne un objet qui correspond à la racine du balisage indiqué.

Parse(String, ParserContext, Boolean)

Lit l'entrée XAML et crée un graphique d'objet en utilisant le lecteur XAML par défaut de WPF et un writer d'objet XAML associé.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Événements

LoadCompleted

Se produit lorsqu'une opération de chargement asynchrone se termine.

S’applique à

Voir aussi