eXtensible Application Markup Language (XAML)
Eintrag zuletzt aktualisiert am: 16.05.2021
eXtensible Application Markup Language (XAML) ist der Name einer
XML-basierten Sprachen zru Darstellung von .NET-
Objektbäumen in
XML-Form. XAML wird primär zur Beschreibung grafischer Benzutzeroberflächen verwendet, aber für das Drucken (
XPS) sowie auch in der
Windows Workflow Foundation (WF) verwendet Microsoft XAML um Workflows darzustellen.
Abkürzung: XAML
gesprochen "zammel"
Aktuelle XAML-Dialekte für Benutzeroberflächen
1. XAML in
Windows Presentation Foundation (
WPF)
2. XAML in
Xamarin Forms (seit 2014) und deren Nachfolger
.NET Multi-Platform App UI (.NET MAUI)
3. XAML in
Universal Windows Platform Apps (
UWP) alias
UWP XAML Framework oder
WinRT XAML Framework sowie der damit zusammenhängenden
Windows UI Library 2 (WinUI2)
4. XAML in der
Windows UI Library 3 (
WinUI3)
Frühere XAML-Dialekte für Benutzeroberflächen
1. XAML in Silverlight
2. XAML in
Windows 8 "
Metro" Apps
Spezifikation zur Standardisierung der XAML-Dialekte, die Mitte 2017 began.
Ähnlichkeiten zu früheren Techniken
Ein XAML-Dokument ist die serialisierte Form eines .NET-
Objektmodells. Dieses Konzept hat Microsoft schon bereits früher in .NET angewendet, z.B. bei
ASP.NET-
Serversteuerelementen,
Microsoft Build und dem Konfigurationsmodell des
.NET Framework, erst seit
.NET 3.0 erst heißt dieses Konzept aber XAML und XAML bietet auch noch einige Konzepte, die es vorher nicht gab.
XAML ist syntaktisch jedoch eine Weiterentwicklung des in
ASP.NET verwendeten Formats.
Im Rahmen von
WinRT Microsoft hat XAML in native Code neu implementiert. Anders als in dem .NET-basierten XAML in
WPF und Silverlight wird das
WinRT-XAML also direkt in Maschinencode umgesetzt und ist damit voraussichtlich schneller.
XML-Namensräume
Allgemeiner
XML-Namensraum für XAML:
http://schemas.microsoft.com/winfx/2006/xaml und
http://schemas.microsoft.com/winfx/2009/xaml
XAML in
WPF, Silverlight,
UWP und
WinUI3:
http://schemas.microsoft.com/winfx/2006/xaml/presentation
XAML in
Xamarin.Forms:
http://xamarin.com/schemas/2014/forms
XAML in .NET MAUI:
http://schemas.microsoft.com/dotnet/2021/maui
XAML in Windows Workflow:
http://schemas.microsoft.com/netfx/2009/xaml/activities
.NET-Namensräume
XAML in
WPF und Silverlight: System.Windows.UI
XAML in
UWP: Windows.UI
XAML in
WinUI3: Microsoft.UI
XAML in
Xamarin.Forms:
Xamarin.Forms
XAML in MAUI: Microsoft.Maui
Beispiel
XAML-Code:
<
Button
Name="C_
Button"
Click="HW
Button_Click"
Dock
Panel.Dock="Fill"
Width="100"
Margin="10,10,10,10">
Hallo Welt!
</
Button>
entspricht folgendem Code:
Button b = new
Button();
b.With=100;
b.Content = “Hello World!";
b.OnClick += new ClickEvent
Handler(HW
Button_Click);
XAML-Konzepte
XAML besteht aus folgenden Grundkonzepten:
- XAML Object Element Syntax: Beim Parsen eines XAML-Dokuments wird für jedes XML-Element ein gleichnamiges .NET-Objekt instanziiert. Jedes XAML-Dokument besitzt (wie jedes XML-Dokument) genau ein Wurzelelement, sodass ein XAML-Dokument auf genau ein .NET-Objekt mit Unterobjekten abgebildet wird.
- XAML Attribute Syntax: Die Attribute des .NET-Objekts werden durch die Attribute des XML-Element die Attribute des .NET-Objekts befüllt.
- XAML Content Syntax: Der Inhalt eines XML-Elements kann einem bestimmten, in der Klas-sendefinition festgelegten Standardattribut zugewiesen werden.
- XAML Property Element Syntax: Ein .NET-Attribut kann auch durch ein XML-Element be-schrieben werden, in dem der Klassenname von dem Attributnamen durch einen Punkt getrennt ist. Da ein XML-Attribut immer nur einen Wert enthalten kann, eröffnet die XAML Property Element Syntax die Möglichkeit, ein .NET-Attribut deklarativ mit Unterobjekten zu befüllen.
- XAML Attached Property Syntax: Ein Unterelement kann Attribute eines übergeordneten Ele-ments setzen.
- XAML Markup Extension Syntax: Anstelle eines Literals kann man als Attributwert einen Aus-druck angeben, der dynamische ausgewertet wird. Dies wird zum Beispiel für Datenbindung einge-setzt, um den Inhalt von zwei Steuerelementen oder zwischen einem Steuerelement und einer Da-tenquelle synchron zu halten, ohne dafür Programmcode einzusetzen. Ein anderes Anwendungsge-biet ist der Verweis auf Ressourcen. Bei der XAML Markup Extension Syntax steht der Ausdruck in geschweiften Klammern.
XAML-Namensräume
In einem XAML-Dokument können
XML-Elemente erscheinen, die aus unterschiedlichen Bibliothe-ken stammen.
XAML-Basiselemente´
http://schemas.microsoft.com/winfx/2006/xaml
XAML für
WPF
http://schemas.microsoft.com/winfx/2006/xaml/presentation
XAML für WF
http://schemas.microsoft.com/winfx/2006/xaml/workflow
Die Namenräume werden wie in
XML üblich eingebunden:
<Window x:Class="
WWWings
WPF.FXAMLSyntax"
xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml" … >
Es ist kein Schreibfehler, dass in den Namensraum-
URLs noch der Begriff "WinFX" erscheint. Microsoft hat die Namensänderung von WinFX zu
.NET 3.0 hier nicht mehr vollzogen.
XAML in WPF
Die
Windows Presentation Foundation (
WPF) ist ein Framework zur Entwicklung grafischer Benutzerschnittstellen für Desktop-Anwendungen und damit ein Ersatz für die mit .NET 1.x eingeführte
Windows Forms-Bibliothek. Im Gegensatz zu
Windows Forms kann bei
WPF die Beschreibung der Oberfläche durch
XML-Elemente erfolgen. Microsoft hat dafür eine
XML-Sprache mit Namen Extensible Application Markup Language (XAML) entwickelt.
XAML ist eine
XML-basierte Sprache mit der einzelne .NET-
Objekte und ganze
Objektbäume in
XML-Form ausdrückbar sind. Innerhalb von
WPF wird dies zur Beschreibung von Oberflächenelemente wie <TextBlock>, <
TextBox>, <
Button>, <
ListBox>, <ToolTip>, <Line>, <Polygon>, <MediaElement> u.v.m. Verwendet. Elemente sind Teile von
Containern, die die Anordnung bestimmen, z.B. <Canvas>, <Grid>, <Dock
Panel> und <Frame>. Zu jedem XAML-Element existiert eine gleichnamige .NET-Klasse in der
.NET 3.0-Klassenbibliothek im Namensraum System.Windows in .NET-Assemblies PresentationCore.dll und PresentationFramework.dll. Dabei darf man diesen neuen Namensraum nicht mit dem bereits im Jahre 2002 eingeführten Namensraum
System.Windows.Forms aus der .NET-Klassenbibliothek für
Windows Forms verwechseln. Es wäre sicherlich geschickter, die
WPF-Klassen besser von den
Windows Forms-Klassen zu trennen.
Die Abbildbarkeit der XAML-Elemente in Klassen ermöglicht sowohl die Kompilierung von XAML-Anwendungen als auch die komplette Erstellung von
WPF-Anwendungen durch Programmcode. Die Abbildbarkeit der XAML-Elemente in Klassen ermöglicht sowohl die Kompilierung von XAML-Anwendungen als auch die komplette Erstellung von
WPF-Anwendungen durch Programmcode. Der Einsatz von
XML bietet den Vorteil einer klaren Trennung zwischen Code und Layout.
Microsoft hat diese Steuerelementarchitektur aus
ASP.NET-Webanwendungen übernommen. Tagbasierte Windows-Anwendungen waren bisher nur durch so genannte
HTA (
HTML Applications) möglich, die jedoch kaum Verwendung fanden. Die Steuerelementnamen von
HTML/
ASP.NET und XAML sind aber so verschieden, dass weiterhin ein Austausch von grafischen Oberflächen zwischen Windows und Web nicht einfach fällt. Ebenso fehlt in
WPF die Option, eine XAML-Anwendung per Doppelklick auf eine .xaml-Datei automatisch zu kompilieren.
In XAML können auch selbstdefinierte .NET-
Objekte eingebunden werden (z.B. zur Anzeige bestimmte Daten), die dann aber explizite Einbindung des Namensraums erfordern (vgl. dazu das Bei-spAbschnitt "XAML-
Serialisierung").