In vielen Artikeln wird zwar erklärt was XAML ist, aber auf die Verarbeitung von XAML wird oftmals nicht eingegangen. Daher möchte ich heute in diesem Blogeintrag eine kurze Übersicht zu XAML und dessen Verarbeitung geben.

XAML wird bei der Windows Presentation Foundation Technologie verwendet, um unter anderem Controls, Vektor Grafiken, Animationen, Databinding und vieles mehr zu erzeugen und zu unterstützen. Die Windows Presentation Foundation ist ein Bestandteil des .NET Frameworks 3.0. Durch das .NET Framework 3.0 und WPF ist es möglich deklarativen XAML Code und proceduralen C# oder Visual Basic Code aus der Code-Behind Datei in eine lauffähige XAML Browser Applikation (XBAP) oder ein Windows Applikation zu übersetzen. Durch XAML werden Design und Anwendungslogik von einander getrennt, d.h. User Interface Designer können mit XAML die Oberfläche, das sogenannte UI, gestalten, während der Programmierer die Businesslogik einer Anwendung in der Code-Behind Datei hinterlegt bzw. programmiert.

XAML ist eine deklarative Sprache die auf XML basiert, daher ähneln sich XAML und XML in folgenden Punkten:

  • XAML verwendet die XML Syntax
  • XAML verwendet spezielle in XML Tags für den Einsatz in der Windows Presentation Foundation
  • XAML ist Code

Ein Control das mit XAML erzeugt werden kann, kann auch mit C# oder Visual Basic erzeugt werden. Wie aber wird der XAML Code im Hintergrund verarbeitet? Dazu muss man etwas hinter die Kulissen schauen. XAML Code wird nicht interpretiert und im Hintergrund wird nur bedingt Programmcode erzeugt, zumindest nicht wenn man es nicht gezielt definiert, aber das ist ein anderes Thema.

Die folgende Grafik zeigt den Build-Prozess einer XAML Datei:

 

image

Bei der Kompilierung einer WPF Anwendung wird aus der XAML Datei eine BAML (Binary XAML) Datei generiert. Natürlich stellt sich jetzt die Frage warum der Compiler nicht direkt auf die XAML Datei zugreift. Der Grund besteht darin, dass BAML wesentlich schneller eingelesen werden kann, dass sich wiederum positiv auf die Performance auswirkt. Anschließend wird die BAML Datei der Assembly als Ressource hinzugefügt, das auch dem Manifest entnohmen werden kann.