Architecture de l'analyseur XAML
Concepteur WPF pour Visual Studio charge des documents en langage XAML et crée des objets WPF pour l'affichage dans Visual Studio. Les erreurs rencontrées pendant le chargement s'affichent dans la fenêtre Liste d'erreurs.
Phases de chargement XAML
Concepteur WPF charge un document XAML et crée une arborescence de syntaxe abstraite (Abstract Syntax Tree, AST) correspondante. L'AST est une structure de données qui représente le code XAML analysé. C'est une arborescence finie, étiquetée et orientée dans laquelle les nœuds internes sont étiquetés par opérateurs, et les nœuds feuilles représentent les opérandes des opérateurs de nœud. Les feuilles possèdent des opérateurs nullaires qui sont variables ou constants.
Le chargement d'un document XAML se produit dans une série de phases, comme indiqué dans le tableau suivant.
Phase de chargement XAML |
Description |
---|---|
Vérification de la syntaxe XML |
Scanneur : passe lexicale qui cherche toute construction mal formée, vérifie les caractères non valides et crée des entités lexicales. Analyseur : crée l'AST et effectue l'analyse de paires pour vérifier que les balises sont bien formées et équilibrées. |
Vérification de la syntaxe XAML |
ConvertToXaml cherche tous les types, met les informations de type dans l'AST XAML et annote l'AST XAML. Validate effectue le contrôle d'erreurs et vérifie la position des nœuds dans l'arborescence. |
Modèle et instanciation d'objet |
Phase séparée avec examen de l'AST afin de créer le Modèle d'édition et les objets WPF. |
Les nœuds comportant des erreurs provenant des phases précédentes sont marqués comme erronés et ne sont plus parcourus pendant les phases suivantes. Si les erreurs sont rencontrées lors des phases Scanneur et Analyseur, la phase Modèle et instanciation d'objet n'est pas tentée.
Vérification de la syntaxe XML
Les phases Scanneur et Analyseur vérifient que le document à charger est un document XML bien formé qui ne contient pas d'erreurs de syntaxe XML. Un exemple d'erreur de syntaxe XML est une balise <Button> sans balise de fin </Button> correspondante. L'analyseur tente d'éliminer les erreurs et, à cause de cela, de multiples erreurs peuvent être signalées lors d'une tentative unique d'analyse du document.
Vérification de la syntaxe XAML
L'analyseur parcourt l'AST XML lors de passes séparés pour vérifier que le document est un document XAML valide, ce qui signifie qu'il est conforme au schéma XML de XAML et ne contient pas de code XAML non valide. Un exemple de code XAML non valide est un élément qui utilise des déclarations de propriété non valides, comme <Button SomeProperty="Mark">.
Ces passes incluent la résolution de type, afin que les informations, telles que les noms d'élément et noms de propriété, puissent être validées pour ce type d'élément. Par exemple, l'analyseur vérifie si SomeProperty est une propriété de Button. Les types manquants provoquent des erreurs.
L'analyseur tente d'éliminer les erreurs et de multiples erreurs peuvent être signalées lors d'une tentative unique d'analyse du document. Toutefois, toutes les erreurs possibles ne sont pas signalées. Par exemple, si un nom d'élément est mal orthographié et que le nom de propriété dans cet élément est mal orthographié, seule l'erreur de l'élément sera signalée, parce que les noms de propriété ne peuvent pas être validés tant que l'erreur de l'élément n'est pas résolue.
Notes
Cette phase n'inclut pas la validation des valeurs des propriétés. Par exemple, <Button Background="xBlue"/> n'est pas détecté lors de cette phase. Reportez-vous à la discussion ultérieure dans cette même rubrique.
Modèle et instanciation d'objet
À la fin de la vérification de syntaxe, un AST correspondant au XAML d'une arborescence de documents XAML sert de vue ou de curseur à cet AST.
Dans la dernière phase, le modèle et les instances sous-jacentes sont instanciées et les valeurs des propriétés sont converties depuis les chaînes de caractères et affectées. L'analyseur effectue ceci en créant une arborescence de documents à l'aide d'une classe du gestionnaire de l'arborescence de documents. Lorsque l'arborescence de documents est créée pour le code XAML, les instances WPF sous-jacentes sont également créées. Ces instances sont utilisées comme vue dans le concepteur.
Lorsque le modèle et les instances sont créés, si une exception est levée, les objets des enfants du nœud où l'erreur est survenue ne sont pas créés. Le modèle est construit pour le reste de l'arborescence. Cela indique autant d'erreurs que possible.
Par exemple, dans le fragment de code, <Button Background="Test"/>, TypeConverter pour le type Brush tente de convertir Test en une instance Brush. Parce que Test n'est pas une valeur Brush valide, le convertisseur de type lève une exception qui stoppe le processus d'analyse pour tous les nœuds enfants, mais l'exception n'affecte pas l'analyse du reste du document.
Les valeurs de propriétés sont converties depuis des chaînes lorsque l'objet propriétaire est instancié. Cela se produit lorsque l'objet propriétaire est utilisé sur l'aire de conception. De nombreuses erreurs de plage de valeurs ne sont pas signalées jusqu'à ce que l'objet parent soit utilisé par le concepteur.
Ce comportement est semblable à la compilation WPF. Le compilateur WPF ne valide pas ou ne tente pas de convertir des valeurs d'attribut (propriété) pendant la compilation. Les convertisseurs de type ne sont pas appelés jusqu'à ce que l'arborescence objet soit instanciée pendant l'exécution par WPF.
Notes
Pour charger des dictionnaires de ressources externes, il y a une interaction entre le Modèle d'édition et l'analyseur. Lorsque le Modèle d'édition doit charger des fichiers XAML supplémentaires, il déclenche une opération de chargement de XAML.
Messages d'erreur
Une rubrique d'aide de message d'erreur Concepteur WPF indique la phase de chargement XAML qui a déclenché l'erreur. Le tableau suivant montre la correspondance des messages avec les phases.
Phase de chargement du XAML |
Message d'erreur |
---|---|
Vérification de la syntaxe XML |
Cette erreur est déclenchée lorsque le fichier XAML n'est pas un document XML bien formé. |
Vérification de la syntaxe XAML |
Cette erreur est déclenchée lorsque le fichier est un document XML valide, mais n'est pas un document XAML bien formé. |
Modèle et instanciation d'objet |
Cette erreur est déclenchée lorsque le fichier est un document XAML bien formé, mais qui contient une ou plusieurs incompatibilités de type. |