Freigeben über


Architektur des XAML-Parsers

[Dieses Dokument dient lediglich Vorschauzwecken und kann in späteren Versionen geändert werden. Leere Themen sind als Platzhalter enthalten.]

Der WPF-Designer für Visual Studio lädt Extensible Application Markup Language (XAML)-Dokumente und erstellt WPF-Objekte zur Anzeige in Visual Studio. Beim Laden auftretende Fehler werden im Fehlerlistenfenster angezeigt.

XAML-Ladephasen

Der WPF Designer lädt ein XAML-Dokument und erstellt eine entsprechende abstrakte Syntaxstruktur (Abstract Syntax Tree, AST). Die AST ist eine Datenstruktur, die das analysierte XAML darstellt. Sie ist eine endliche, beschriftete, gerichtete Baumstruktur, in der die internen Knoten mit Operatoren beschriftet sind und die Blattknoten die Operanden der Knotenoperatoren darstellen. Die Blätter verfügen über auf NULL festlegbare Operatoren, die Variablen oder Konstanten sein können.

Das Laden eines XAML-Dokuments besteht aus verschiedenen Phasen, die in der folgenden Tabelle dargestellt sind.

XAML-Ladephase

Beschreibung

XML-Syntaxüberprüfung

Scanner: Lexikalischer Durchgang, in dem nach jeglichen Formatfehlern und ungültigen Zeichen gesucht wird und in dem lexikalische Token erstellt werden.

Parser: Erstellt die AST und führt eine Paaranalyse aus, um sicherzustellen, dass Tags wohlgeformt und ausgeglichen vorhanden sind.

XAML-Syntaxüberprüfung

ConvertToXaml sucht nach allen Typen, speichert die Typinformationen in der XAML-AST und versieht die XAML-AST mit Anmerkungen.

Validate führt Fehlerüberprüfungen aus und überprüft die Positionen der Knoten in der Struktur.

Modell- und Objektinstanziierung

Eigenständige Phase mit einem separaten Durchgang durch die AST, in der das Bearbeitungsmodell und die WPF-Objekte erstellt werden.

Knoten mit Fehlern aus vorherigen Phasen werden als fehlerhaft gekennzeichnet und in späteren Phasen nicht mehr berücksichtigt. Wenn in der Scannerphase und der Parserphase Fehler auftreten, wird die Modell- und Objektinstanziierungsphase nicht ausgeführt.

XML-Syntaxüberprüfung

In der Scannerphase und der Parserphase wird überprüft, ob das zu ladende Dokument ein wohlgeformtes XML-Dokument ist, das keine XML-Syntaxfehler enthält. Ein XML-Syntaxfehler ist beispielsweise ein <Button>-Tag ohne ein entsprechendes </Button>-Endtag. Der Parser versucht Fehler zu beheben, und deshalb werden bei einer einzigen Analyse eines Dokuments möglicherweise mehrere Fehler ausgegeben.

XAML-Syntaxüberprüfung

Der Parser durchläuft die XML-AST in separaten Durchgängen, um sicherzustellen, dass das Dokument ein gültiges XAML-Dokument ist, d. h., dass es dem XAML-XML-Schema entspricht und kein ungültiges XAML enthält. Ungültiges XAML ist beispielsweise ein Element, das ungültige Eigenschaftendeklarationen (z. B. <Button SomeProperty="Mark">) verwendet.

Zu diesen Durchgängen gehört auch eine Typauflösung, sodass Informationen wie Elementnamen und Eigenschaftennamen anhand des Elementtyps überprüft werden können. Beispielsweise wird vom Parser überprüft, ob SomeProperty eine Eigenschaft von Button ist. Bei einem fehlenden Typ wird ein Fehler ausgegeben.

Der Parser versucht Fehler zu beheben, und bei einer einzigen Analyse eines Dokuments werden möglicherweise mehrere Fehler ausgegeben. Jedoch werden nicht alle möglichen Fehler ausgegeben. Wenn beispielsweise der Name eines Elements und der Name einer Eigenschaft innerhalb dieses Elements falsch geschrieben werden, wird anfangs nur der Elementfehler ausgegeben, da der Eigenschaftenname erst überprüft werden kann, wenn das Element ordnungsgemäß aufgelöst wird.

Hinweis

In dieser Phase werden keine Eigenschaftswerte überprüft.Beispielsweise wird in dieser Phase für <Button Background="xBlue"/> kein Fehler ausgegeben.Weitere Informationen hierzu finden Sie weiter unten in diesem Thema.

Modell- und Objektinstanziierung

Am Ende der Syntaxüberprüfung gibt es eine dem XAML entsprechende AST, die eine XAML-spezifische Dokumentstruktur ist, die als Ansicht oder Cursor für diese AST dient.

In der letzten Phase werden das Modell und die zugrunde liegenden Instanzen instanziiert und die aus Zeichenfolgen konvertierten Eigenschaftswerte zugewiesen. Hierzu erstellt der Parser eine Dokumentstruktur, die eine Dokumentstruktur-Manager-Klasse verwendet. Wenn die Dokumentstruktur für das XAML erstellt wird, werden auch die zugrunde liegenden WPF-Instanzen erstellt. Diese Instanzen werden im Designer als Ansicht verwendet.

Wenn beim Erstellen des Modells und der Instanzen eine Ausnahme ausgelöst wird, werden für die untergeordneten Knoten des fehlerhaften Knotens keine Objekte erstellt. Für die restliche Struktur wird das Modell erstellt. Dadurch werden möglichst viele der vorhandenen Fehler ausgegeben.

Beispielsweise wird im Codefragment <Button Background="Test"/> vom TypeConverter für den Brush-Typ versucht, Test in eine Brush-Instanz zu konvertieren. Da Test kein gültiger Brush-Wert ist, wird vom Typkonverter eine Ausnahme ausgelöst, durch die die untergeordneten Knoten nicht weiter analysiert werden. Diese Ausnahme hat jedoch keinen Einfluss auf die Analyse des restlichen Dokuments.

Die Werte der Eigenschaften werden beim Instanziieren des besitzenden Objekts aus Zeichenfolgen konvertiert. Hierzu kommt es, wenn das besitzende Objekt in der Entwurfsoberfläche verwendet wird. Viele Wertbereichsfehler werden erst ausgegeben, wenn das übergeordnete Objekt im Designer verwendet wird.

Dieses Verhalten entspricht weitgehend der WPF-Kompilierung. Vom WPF-Compiler werden bei der Kompilierung keine Attributwerte (Eigenschaftswerte) überprüft oder konvertiert. Es werden keine Typkonverter aufgerufen, bis die Objektstruktur zur Laufzeit von WPF instanziiert wird.

Hinweis

Beim Laden von externen Ressourcenwörterbüchern gibt es eine Interaktion zwischen dem Bearbeitungsmodell und dem Parser.Wenn für das Bearbeitungsmodell zusätzliche XAML-Dateien geladen werden müssen, wird ein XAML-Ladevorgang ausgelöst.

Fehlermeldungen

Im WPF Designer-Hilfethema zu einer Fehlermeldung wird beschrieben, in welcher XAML-Ladephase der entsprechende Fehler ausgelöst wird. Die folgende Tabelle enthält die Zuordnung der Meldungen zu den Phasen.

XAML-Ladephase

Fehlermeldung

XML-Syntaxüberprüfung

Dieser Fehler wird ausgelöst, wenn die XAML-Datei kein wohlgeformtes XML-Dokument ist.

XAML-Syntaxüberprüfung

Dieser Fehler wird ausgelöst, wenn es sich bei der Datei um ein gültiges XML-Dokument, aber nicht um ein wohlgeformtes XAML-Dokument handelt.

Modell- und Objektinstanziierung

Dieser Fehler wird ausgelöst, wenn es sich bei der Datei um ein wohlgeformtes XAML-Dokument handelt, das jedoch mindestens einen Typenkonflikt enthält.

Siehe auch

Konzepte

XAML-Fehler und Hilfe

Weitere Ressourcen

Referenz zu Fehlermeldungen für den WPF-Designer

XAML in WPF