Condividi tramite


Architettura del parser XAML

Aggiornamento: novembre 2007

In Progettazione Windows Presentation Foundation (WPF) per Visual Studio vengono caricati documenti XAML (Extensible Application Markup Language) e vengono creati oggetti WPF da visualizzare in Visual Studio. Gli errori riscontrati durante il caricamento vengono visualizzati nella finestra Elenco errori.

Fasi di caricamento di XAML

In WPF Designer viene caricato un documento XAML e viene creata una corrispondente struttura ad albero sintattica astratta, ovvero una struttura di dati che rappresenta il file XAML analizzato. Si tratta di una struttura ad albero limitata, etichettata e orientata in cui i nodi interni sono identificati da operatori e i nodi foglia rappresentano gli operandi degli operatori nodo. I nodi foglia includono operatori senza argomenti, che sono variabili o costanti.

Il caricamento di un documento XAML si verifica in una serie di fasi, come illustrato nella tabella seguente.

Fase di caricamento di XAML

Descrizione

Verifica della sintassi XML

Scanner: passaggio lessicale in cui viene verificata la presenza di formati non corretti e di caratteri non validi e vengono creati i token lessicali.

Parser: viene creata la struttura ad albero sintattica astratta e viene eseguita l'analisi delle coppie per verificare la correttezza e l'esatta corrispondenza dei tag.

Verifica della sintassi XAML

ConvertToXaml ricerca tutti i tipi, inserisce le informazioni sui tipi nella struttura ad albero sintattica astratta XAML e vi aggiunge annotazioni.

Validate esegue il controllo degli errori e verifica le posizioni dei nodi nella struttura ad albero.

Creazione di istanze di modelli e oggetti

Fase discreta con un'analisi distinta della struttura ad albero sintattica astratta, tramite cui vengono creati il modello di modifica e gli oggetti WPF.

I nodi in cui nelle fasi precedenti si sono verificati errori sono contrassegnati come errati e non vengono controllati di nuovo durante le fasi successive. Se vengono riscontrati errori durante le fasi di scanner e parser, non viene eseguito il tentativo di completare la fase di creazione di istanze di modelli e oggetti.

Verifica della sintassi XML

Durante le fasi di scanner e parser viene verificato che il documento da caricare sia un documento XML ben formato che non contiene errori di sintassi XML. Un errore di sintassi XML è ad esempio un tag <Button> senza un corrispondente tag </Button> di fine. Poiché il parser tenta il recupero dagli errori, è possibile che vengano segnalati più errori dopo un singolo tentativo di analisi del documento.

Verifica della sintassi XAML

Il parser attraversa la struttura ad albero sintattica astratta XML in passaggi distinti per verificare che il documento sia un documento XAML valido, ovvero che sia conforme allo schema XML XAML e che non contenga errori XAML. Un errore XAML è ad esempio un elemento che utilizza dichiarazioni di proprietà non valide, quale <Button Foo="Mark">.

Questi passaggi includono la risoluzione del tipo, in modo che sia possibile convalidare informazioni quali i nomi di elementi e i nomi di proprietà in base al tipo di elemento. Ad esempio, il parser controlla se Foo è una proprietà di Button. I tipi mancanti generano errori.

Poiché il parser tenta il recupero dagli errori, è possibile che vengano segnalati più errori dopo un singolo tentativo di analisi del documento. Tuttavia, non vengono segnalati tutti gli errori possibili. Ad esempio, se il nome di un elemento e il nome della proprietà al suo interno sono scritti in modo errato, inizialmente verrà segnalato solo l'errore dell'elemento, perché i nomi delle proprietà possono essere convalidati solo dopo la risoluzione corretta dell'elemento.

Nota:

Questa fase non include la convalida dei valori di proprietà. Ad esempio, <Button Background="xBlue"/> non viene rilevato durante questa fase. Vedere la descrizione riportata più avanti in questo argomento.

Creazione di istanze di modelli e oggetti

Alla fine della verifica della sintassi, è disponibile una struttura ad albero sintattica astratta che corrisponde al documento XAML contenente un oggetto DocumentTree specifico di XAML che funge da visualizzazione o cursore all'interno di tale struttura.

Nell'ultima fase vengono create istanze del modello e delle istanze sottostanti e i valori di proprietà vengono convertiti da stringhe e assegnati. Questa fase viene completata dal parser creando un oggetto DocumentTree tramite la classe ModelDocumentTreeManager. Quando viene creato DocumentTree per XAML, vengono create anche le istanze WPF sottostanti, che vengono utilizzate come visualizzazione nella finestra di progettazione.

Se viene generata un'eccezione dopo la creazione del modello e delle istanze, la creazione di oggetti per i nodi figlio del nodo in cui si è verificato l'errore non viene completata. Il modello viene costruito per la parte rimanente della struttura ad albero, esponendo il numero maggiore possibile degli errori.

Ad esempio, nel frammento di codice <Button Background="Test"/> l'oggetto TypeConverter per il tipo Brush tenta di convertire Test in un'istanza di Brush. Poiché Test non è un valore valido di Brush, il convertitore di tipi genera un'eccezione che interrompe il processo di analisi per i nodi figlio, ma non influisce sull'analisi del resto del documento.

I valori delle proprietà vengono convertiti da stringhe dopo la creazione dell'istanza dell'oggetto proprietario. Ciò si verifica quando l'oggetto proprietario viene utilizzato nell'area di progettazione. Molti errori relativi a intervalli di valori vengono segnalati solo quando l'oggetto padre viene utilizzato dalla finestra di progettazione.

Questo comportamento è simile alla compilazione WPF. Il generatore WPF non convalida né tenta di convertire i valori di attributo (proprietà) durante la compilazione. I convertitori di tipi vengono chiamati solo dopo la creazione di un'istanza della struttura ad albero degli oggetti tramite WPF in fase di esecuzione.

Nota:

Per il caricamento di dizionari di risorse esterni, esiste un'interazione tra il modello di modifica e il parser. Quando il modello di modifica deve caricare file XAML aggiuntivi, attiva un'operazione di caricamento di XAML.

Messaggi di errore

Nell'argomento della Guida relativo ai messaggi di errore di WPF Designer viene descritta la fase di caricamento di XAML che ha generato l'errore. Nella tabella seguente è mostrata la corrispondenza tra messaggi e fasi.

Fase di caricamento di XAML

Messaggio di errore

Verifica della sintassi XML

Questo errore viene generato quando il file XAML non è un documento XML ben formato.

Verifica della sintassi XAML

Questo errore viene generato quando il file è un documento XML valido, ma non è un documento XAML ben formato.

Creazione di istanze di modelli e oggetti

Questo errore viene generato quando il file è un documento XAML ben formato, ma contiene uno o più tipi non corrispondenti.

Vedere anche

Concetti

Errori XAML e Guida

Riferimenti

DocumentTree

ModelDocumentTreeManager

Altre risorse

Riferimenti ai messaggi di errore di Progettazione WPF

XAML

Utilizzo delle risorse