Zurück zur Übersicht

Microsoft Extensible Application Markup Language (XAML)

Mark Kaczkowski

XAML ist die XML basierte Sprache zum Beschreiben und Erstellen von Oberflächen der Windows Presentation Foundation (ersetzt die alte GDI/GDI+ Oberfläche) und damit ein Grundpfeiler der neuen WinFX API (Nachfolger von Win32) des 2006 kommenden Betriebssystems Microsoft Windows Vista. Sie wird - anders als ihre schon verfügbare und verwendete (z.B. Mozilla Firefox) Open-Source Konkurrenz XUL - ausschließlich für Windows Systeme verfügbar sein. XAML unterstützt das hauseigene .net Framework und soll im praktischen Gebrauch von Anwendungen wie Microsoft Visual Studio erstellt werden.

Übersicht

Neue WinFX Anwendungen sollen mit Hilfe von deklarativen Programmiersprachen erstellt werden. Für die grafische Benutzeroberfläche steht dafür die deklarative XAML bereit, die mit Hilfe von DirectX fest mit der Hardware verbunden ist und damit eine effiziente und geschwindigkeitsoptimierte Lösung darstellt. Aufgrund von Restriktionen des XML Standards wird Programmlogik und Oberfläche gezielt getrennt. XAML ist am ehesten mit ASP.NET zu vergleichen, wo mit XHTML und ASP-Syntax Userinterface und Code voneinander getrennt sind. Darüber hinaus besitzt es eine Ähnlichkeit zu SVG durch seine vektororientierte Ausrichtung, Vergleiche mit Macromedia Flash sind durch aus angebracht.

Von vielen Experten wird die forcierte Kombination von XAML, Windows Presentation Foundation und .NET als Killerkombination angesehen: Die Möglichkeit zentral zu entwickeln, zentral zu verteilen und sicher jeden Inhalt im Webbrowser bzw. Betriebssystem anzuzeigen erweitern das Verständnis unseres bisherigen Software Alltages. Dass dabei Microsoft aus den Fehlern von Java lernt, erhöht die Gefahr für Open Source Projekte wie das Konkurrenzprodukt XUL.

Sehr trivial zusammengefasst wären XAML-Applikationen ein XML-basiertes "Microsoft Java", die nicht vollständig downgeloadet sein müssen um zu starten und die anstatt von einer Java Laufzeitumgebung vom Betriebssystem nativ ausgeführt werden können.

Vorteile

Aufbau & Features

Gliederung

Jede XAML-Datei besitzt folgende hierarchische Gliederung:

Ein oder mehrere Elemente können, abhängig von ihrer Ordnung, das Layout und Verhalten der Oberfläche beeinflussen. Jedes Element besitzt nur ein Parent. Jedes Element kann eine unbegrenzte Anzahl von Childs besitzen, nur bei einigen wenigen ist die Anzahl Restriktionen unterworfen, z.B. besitzt die Scrollbar kein einziges Child. In allen XAML-Anwendungen ist das Rootobjekt typischerweise ein Panel (oder eines seiner sechs Unterarten), dass sich um Positionierung und Rendern jeglichen Inhaltes kümmert. Ein Panel kann - wie in Java/Swing/AWT wiederum mehrere Panels beinhalten.

Eigenschaften und Einstellungen z.B. eines Buttons werden wie bei XML bzw. HTML im Tag als Attribute aufgeführt. Wie jede XML-Datei besitzt XAML einen Root-Tag. Bei XAML nimmt man ein Vaterobjekt (z.B. ein Fenster [window]) in das man weitere Kinder (also Elemente) einfügen kann. Für das Vaterobjekt muss das Root-Tag entsprechende Attribute xmlns und xmlns:x besitzen, die dem Parser wichtige Informationen liefern. Hier ein Codebeispiel für das Vaterobjekt Canvas (Beispiel aus msdn):
<Canvas 
  xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
  xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005">
  ...
</Canvas>

Verknüpfung von GUI und Code

Um z.B. Buttons mit einer Methode zu verknüpfen schreibt man nun z.B. in Microsoft Visual Basic .NET oder C# so genannte partial classes. Sie teilen sich den selben Namespace. Der Compiler erstellt dann die notwendigen Verknüpfungen. Wenn man - entgegen der klaren Empfehlung Oberfläche und Code zu trennen - doch Code im XAML Dokument unterbringen möchte, kann man dies auch tun: <x:Code> leitet den entsprechenden Bereich ein. Damit der Parser nun die entsprechenden Zeilen nicht auch noch interpretiert, muss er unbedingt in <CDATA[...]]> eingeschlossen sein (Beispiel aus msdn):
<Canvas>
  <Button Name="button1" Click="Clicked">Click Me!</Button>
  <x:Code<>![CDATA
    void Clicked(object sender, RoutedEventArgs e)
    {
        button1.Content = "Hello World";
    }
  ]]></x:Code>
</Canvas>

Styles und Schemas

In XAML ist es möglich die Oberfläche sehr einfach an individuelle Bedürfnisse anzupassen. Das fängt bei den Farben der einzelnen Buttons an und geht weiter bis zu den individuellen Formen von einzelnen Bildschirmelementen. Dazu kann man bestehende Schemas verwenden und sie mit geringem Aufwand modifizieren.

Beispiel:

Innerhalb eines XAML Dokumentes definiert man seinen eigenen Style für einen Button:
<Style def:Name="MyStyle">               
           <Button Background="Red" FontSize="24"/>
</Style> 
Beim Erstellen eines neuen Buttons verweist man dann nur noch auf seinen selbst erstellten Style:
<Button Style="{MyStyle}">Styled</Button>

Transformationen und Animationen

XAML unterstützt Transformationen, wie sie bereits aus Macromedia Flash oder SVG bekannt sind. Bei den Animationen sieht es dagegen etwas anders aus. Von Haus aus unterstützt die XAML Syntax keine weit reichende Animation. Um dies dennoch zu bewerkstelligen muss man die Mapping und xmlns Konstrukte verwenden, um einen Windows Vista eigenen Namespace zu laden:
<?Mapping XmlNamespace="animC" ClrNamespace="MSAvalon.Windows.Media.Animation" 
                               Assembly="PresentationCore" ?>
<?Mapping XmlNamespace="animF" ClrNamespace="MSAvalon.Windows.Media.Animation" 
                               Assembly="PresentationFramework" ?>

Document Services

XAML bietet mehrere Features, die es ermöglichen, Dokumente besser zu betrachten, navigieren und paginieren. Dazu enthält XAML mehrere Kontrolleisten, die bei Bedarf aktiviert werden können. Dazu gehört eine Seitenzahlanzeige, Vor- und Zurückbuttons, etc. die der PageViewer anbietet.

Darüber hinaus kann man mit dem Document Layout Service Texte mit einfachen Tags versehen, um jederzeit auf jedem Bildschirm ein angemessenes und leicht zu lesendes Layout zu installieren.

OpenSource XAML

Da bis zum Release von Windows Vista - und damit dem Realtime-Interpreter - noch einige Zeit vergehen wird, haben sich mehrere OpenSource Projekte zur Aufgabe gemacht schon jetzt für alle .NET fähigen Windowssysteme funktionsfähige Parser zu erstellen. Damit kann man auch zum heutigen Zeitpunkt schon XAML Anwendungen entwickeln, testen und dem Endkunden zur Verfügung stellen. Siehe dazu auch UnitedXAML.

Zusammenfassung und Ausblick

Mit XAML scheint Microsoft ein großer Wurf zu gelingen. Die Möglichkeit einfach und bequem kleinere Desktopanwendungen zu schreiben, die zudem komfortabel übertragen werden können, sucht in der Softwarewelt ihres gleichen. Das schon vorhandene Open-Source Konkurrenzprodukt XUL krankt an der Uneinigkeit der beiden Entwicklergruppen der Mozilla Foundation und dem Gnome Projekt über das gemeinsame Ziel. Obwohl XAML aufgrund der Bindung an die Windows Presentation Foundation und .NET eine reine Windows Ausrichtung bekommen wird, dürfte es sich im Desktopbereich schnell durchsetzen.

Über mögliche Sicherheitsprobleme durch die Integration einer weiteren, mächtigen Programmiersprache in das Betriebssystem, wie schon bei ActiveX in dem ins Betriebssystems integrierten Internet Explorers wurde noch nicht diskutiert. Mit dem Erscheinen von Windows Vista wird der Alltag diese Frage beantworten. Hoffen wir, dass Microsoft aus den Fehlern der Vergangenheit gelernt hat und XAML keine zu weit reichenden Rechte gibt.

1035 Wörter

Quellenangaben