XamlReader Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit un moteur de processeur XAML pour l’analyse XAML et la création d’arborescences d’objets correspondantes.
public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class XamlReader final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class XamlReader
Public NotInheritable Class XamlReader
- Héritage
- Attributs
Exemples
Cet exemple crée une seule ellipse à partir d’une chaîne XAML, appelant Load. Ensuite, il connecte l’Ellipse créée mais déconnectée à la collection Children d’un élément qui existait déjà dans l’application UWP en cours d’exécution. Enfin, l’exemple accède à nouveau à l’Ellipse à l’emplacement où elle a été ajoutée à l’aide d’une requête et modifie l’une de ses propriétés.
string xaml =
"<Ellipse Name=\"EllipseAdded\" Width=\"300.5\" Height=\"200\"
Fill=\"Red\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"/>";
object ellipse = XamlReader.Load(xaml);
//stackPanelRoot is the visual root of a Page in existing XAML markup already loaded by the appmodel
stackPanelRoot.Children.Add(ellipse as UIElement);
//walk the tree using XLinq result and cast back to a XAML type to set a property on it at runtime
var result = (from item in stackPanelRoot.Children
where (item is FrameworkElement)
&& ((FrameworkElement) item).Name == "EllipseAdded"
select item as FrameworkElement).FirstOrDefault();
((Ellipse) result).Fill = new SolidColorBrush(Colors.Yellow);
Remarques
XamlReader est une classe utilitaire avec des méthodes qui créent des objets basés sur une entrée de balisage XAML sous forme de chaîne. XamlReader fournit un comportement de construction d’objet qui met en parallèle la façon dont XAML est analysé par l’analyseur XAML Windows Runtime et l’utilisation de XAML pour définir l’interface utilisateur d’une application UWP.
L’analyse de l’entrée XAML avec XamlReader.Load génère des arborescences d’objets d’exécution d’objets Windows Runtime. L’arborescence d’objets permet de programmer ces objets au moment de l’exécution, en parcourant des parties de l’arborescence complète.
Il est important de comprendre plusieurs concepts lorsque vous créez des objets à partir de XAML avec la méthode XamlReader.Load :
- La chaîne de contenu XAML doit définir un élément racine unique.
- La chaîne de contenu XAML doit être un code XML bien formé, en plus d’être du CODE XAML valide.
- Le contenu XAML doit définir un xmlns par défaut. En règle générale, il s’agit du vocabulaire XAML Windows Runtime, tel qu’identifié par
http://schemas.microsoft.com/winfx/2006/xaml/presentation
. - Tous les assemblys personnalisés référencés dans un mappage d’espace de noms XAML doivent déjà être disponibles pour l’application.
- Le CODE XAML ne doit pas tenter de spécifier l’attribut x :Class, ni d’inclure des attributs définis par XAML pour les gestionnaires d’événements.
- Vous ne pouvez pas utiliser FindName dans le namescope XAML général pour rechercher un objet runtime ajouté, mais vous pouvez effectuer une recherche dans le namescope XAML spécifique de l’objet créé. Pour plus d’informations, voir Namescopes XAML.
- La logique de création d’objet ne peut pas intégrer le XAML chargé à des classes code-behind au moment de l’exécution. Si vous souhaitez ajouter des gestionnaires d’événements, vous devez le faire dans le code en référençant les objets obtenus à partir de l’arborescence d’objets du résultat de chargement et en utilisant une syntaxe propre au langage pour attacher des gestionnaires (par
+=
exemple). - Il doit y avoir du contenu XAML existant ; vous ne pouvez pas remplacer l’arborescence entière du contenu. Vous devez au moins conserver l’élément racine d’origine afin que les implications du modèle d’application d’une page XAML chargée restent actives.
- L’objet créé à partir de Load ne peut être affecté qu’à un seul emplacement dans l’arborescence d’objets principal. Si vous souhaitez ajouter des objets créés à partir d’un code XAML identique à différentes zones de l’arborescence d’objets primaires de l’application, vous devez analyser le CODE XAML plusieurs fois à l’aide de la même chaîne d’entrée, en utilisant différentes destinations pour la valeur de retour.
- L’arborescence d’objets primaire restante doit prendre en charge une propriété appropriée à définir.
Méthodes
Load(String) |
Analyse un fragment XAML bien formé et crée une arborescence d’objets correspondante, puis retourne la racine de l’arborescence d’objets. |
LoadWithInitialTemplateValidation(String) |
Analyse un fragment XAML bien formé et crée une arborescence d’objets correspondante, puis retourne la racine de l’arborescence d’objets. Effectue également la validation au moment du chargement de tous les modèles liés. |