In diesem Artikel soll es wieder einmal um die Neuerungen im Entwicklungsprozess des Avalon Framework gehen, andererseits sollen erste Einblicke in das Programmiermodell gegeben werden. Dazu werden die Anwendungstypen und deren Besonderheiten vorgestellt, die Sie mit Avalon erstellen können. Außerdem werden die möglichen Aufteilungen einer Anwendung in üblichen Programmiercode (C#, VB.NET) und die deskriptive Sprache XAML vorgestellt.
Wie auch beim letzten Mal soll zuerst kurz die aktuelle Installation des Framework besprochen werden. Danach geht es aber gleich ans Eingemachte. Wenn man die Entwicklung des Framework verfolgt, haben sich bestimmte Dinge bereits gut herauskristallisiert, andere sind noch einem ständigen Überarbeitungsprozess unterworfen. So machte es bisher keinen Sinn, die zukünftigen GUI-Komponenten oder Layout-Container im Detail vorzustellen. Da wurde noch an vielen Stellen gehobelt und gesägt - allerdings haben sich die Anwendungsmodelle dabei gut gehalten. Auch die Zusammenarbeit zwischen deskriptivem Code in Form von XAML und dem Code der gewählten Programmiersprache nimmt feste Formen an. Diese vorzustellen soll der Schwerpunkt dieser Ausgabe zu Avalon sein.
Installation der Beta 1
Unter [1], dem Sprungbrett für die Longhorn-Entwickler gelangen Sie über den Link Download the Avalon and Indigo Beta1 Release Candidate zum Download des Microsoft Pre-Release Software Code Named Avalon and Indigo Beta1 RC. Hier können Sie einen Installer laden, der dann die relevanten Teile des SDK aus dem Internet bezieht. Für eine Offline-Installation klicken Sie auf Continue, lassen optional Ihr System überprüfen und klicken wieder auf Continue. Am unteren Ende der Seite in den "Instructions" finden Sie einen kleinen Link zu einem ISO-Image, aus dem Sie selbst eine CD erzeugen müssen (oder Sie entpacken es über WinRAR [2] oder verwenden die Deamon Tools [3]). Als Voraussetzung zur Installation sollten Sie wie bisher über Windows XP oder Windows 2003 verfügen. Im Gegensatz zum letzten CTP kann nun wieder offiziell eine der Express-Versionen des Visual Studio eingesetzt werden, die am besten zuerst installiert wird (inklusive des .NET-Framework 2.0). Im Falle von C# und Visual Basic .NET sind dann auch die Avalon-Projekte verfügbar. Die Indigo-Anwendungsziele erhält man allerdings nur im "vollständigen" Visual Studio. Da es sich um verteilte (Web-)Anwendungen handelt, könnte auch der Visual Web Developer 2005 Express Edition genügen. Die Express-Versionen des Visual Studio 2005 können Sie immer noch unter [4] downloaden. Im Folgenden wird ein Visual Studio 2005 Beta 2 (sehr viele MB) verwendet, das auf dem .NET-Framework 2.0, ebenfalls in der Beta 2, basiert. Darauf aufbauend wird die Avalon/Indigo-Beta RC, d.h. die Laufzeitumgebung des Framework, installiert (208 MB) und dann zum Abschluss ein aktuelles WinFX SDK (351 MB). Letzteres ist für die Bereitstellung der Visual Studio-Unterstützung verantwortlich und muss immer zuletzt installiert werden. Spätestens jetzt sollte man sich Gedanken um eine schnelle Internetverbindung machen. Sie sollten übrigens vor der Installation sämtliche Relikte vorheriger Installationen bis hin zum .NET-Framework 2.0 deinstallieren. Als Belohnung für Ihre Installationsmühen erhalten Sie eine voll funktionstüchtige Entwicklungsumgebung für Avalon-Anwendungen.Anwendungstypen
Für Visual Basic und C# stehen die Anwendungstypen aus Tabelle 1 zur Verfügung. Der Typ Application entspricht hier noch am ehesten dem üblichen Anwendungstyp unter Windows. Grundsätzlich stehen zwei Ausführungstypen zur Verfügung. Entweder die Anwendung wird vollständig im System installiert inklusive eines Eintrages in die Software-Liste, oder die Anwendung wird im Browser wie ein Java-Applet innerhalb einer Sandbox geladen und ausgeführt. In diesem Fall wird nichts lokal installiert.
|
Bei allen Anwendungstypen spielt ClickOnce eine Rolle. Diese Technologie stellt eine Installation über ein Deployment-Manifest (Dateien mit den Endungen *.deploy für Applikationen, *.xapp für Express-Applikationen) auf einem (Web-)Server bereit. Von dort wird mittels ClickOnce das Manifest ausgelesen und darauf basierend die entsprechenden Dateien nachgeladen. Je nach Anwendungstyp werden die Anwendungen vollständig installiert oder nur im Browser ausgeführt. Dies hat nun (positive) Konsequenzen für die Ausführung von XAML-Anwendungen. Während diese in einem vergangenen CTP direkt im Browser ohne vorherige Kompilierung ausführbar waren (Loose XAML), müssen sie nun "umständlich" installiert werden. Mittels Express-Applikationen ist nun zumindest keine Deinstallation mehr notwendig. Alle Anwendungstypen unterliegen zusätzlich den Sicherheitseinstellungen des .NET-Framework.
Ein Avalon-Projekt besteht im Visual Studio aus einer Projektmappe (Solution) und einer Projektdatei für die jeweils verwendete Programmiersprache C# (*.csproj) oder Visual Basic .NET (*.vbproj). Je nachdem, wie Sie unter Avalon ein Fenster oder einen Dialog entwerfen wollen, werden einfache Code-Dateien, z.B. *.cs für C# oder zusammengehörige Dateien *.xaml und *.xaml.cs hinzugefügt (Abpictureung 1). Im ersteren Fall entwerfen Sie ein Fenster wie bisher vollständig im Code der jeweiligen Programmiersprache. Wenn Sie aber XAML nutzen wollen, erstellen Sie einmal die Oberfläche, Stilvorlagen für das Erscheinungspicture von GUI-Elementen, Animationen u.v.m. mit XAML und verwenden eine Code-Behind-Datei (C# oder VB), um die Programmlogik zu implementieren. Innerhalb der XAML-Datei können Sie aber auch Code unterbringen, was sich für kurze Ereignisroutinen gut macht. Andererseits ist es für das Lesen des Code wahrscheinlich günstiger, wenn sich der gesamte Code nur in der Code-Behind-Datei befindet.
Aufbau eines Avalon-Projekts
Die Projektdatei enthält wie bisher sämtliche Informationen und Einstellungen in Form eines XML-Dokuments, die zur erfolgreichen Erstellung der beinhalteten Anwendung(en) notwendig sind. Hauptdatei ist das Application Definition File, dass standardmäßig mit MyApp.xaml benannt wird. Im Application-Element (Listing 1) werden der Name der Hauptanwendung (hier AvalonApp.MyApp) und optional Ereignisverknüpfungen (hier StartingUp) angegeben. Außerdem können anwendungsweite Ressourcen definiert werden wie zum Beispiel Stile zur Anzeige von Schaltflächen oder anderen GUI-Elementen. Wenn Sie eine Express- oder Navigationsanwendung erstellen, wird statt des Application-Elements das NavigationApplication-Element verwendet.Listing 1
<Application x:Class="AvalonApp.MyApp"xmlns="http://schemas.microsoft.com/winfx/avalon/2005"xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"StartingUp="AppStartingUp"><Application.Resources></Application.Resources></Application>
Zu der XAML-Datei gehört außerdem eine Code-Behind-Datei mit demselben Namen, aber im Falle von C# der Endung *.xaml.cs (Listing 2). In der zugehörigen XAML-Datei wurde im Attribut x:Class der Klassenname der Code-Behing-Datei angegeben. Der wird hier als "partial" gekennzeichnet, also als Teil einer vollständigen Klasse. Die "vollständige" Klasse wird dann später bei der Übersetzung erzeugt. Die Referenz auf das Ereignis StartingUp (also der Start der Anwendung) wird über das Attribut StartingUp in der XAML-Datei hergestellt. Die als Wert angegebene Methode AppStartingUp() wird nun in der Klasse MyApp implementiert. Darin wird das Hauptfenster erzeugt und angezeigt. Das Fenster wird wiederum über eine XAML- und eine Code-Behind-Datei definiert.
Listing 2
using System;using System.Windows;using System.Data;using System.Xml;using System.Configuration;namespace AvalonApp{public partial class MyApp : Application{void AppStartingUp(object sender, StartingUpCancelEventArgs e){Window1 mainWindow = new Window1();mainWindow.Show();}}}
In der XAML-Definition des Fensters Window1.xaml wird wieder zuerst das passende Element zur Klasse (hier Window) angegeben. Danach wird die Verknüpfung zur Code-Behind-Datei hergestellt und die Namensräume für den Parser werden eingebunden. Im Attribut Text wird der Inhalt der Titelleiste des Fensters festgelegt. Unterhalb des Elements Window wird in der Regel ein Layout-Element angegeben. Diese Elemente arbeiten als Container für andere Elemente und ordnen diese nach einem bestimmten Algorithmus an (ähnlich den Layout-Managern in Java). Ein Grid verwaltet zum Beispiel seine Elemente in Zeilen und Spalten. Geben Sie nichts Weiteres ab, werden die Elemente wie in Listing 3 übereinander gezeichnet und nur das zuletzt angegebene Element ist sichtbar (Abpictureung 2). Hier werden übrigens eine Schaltfläche, ein Eingabefeld und eine Listbox mit zwei Einträgen definiert.
Listing 3
<Window x:Class="AvalonApp.Window1"xmlns="http://schemas.microsoft.com/winfx/avalon/2005"xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"Text="Meine AvalonApp"><Grid><Button>Test</Button><TextBox>Hallo</TextBox><ListBox><ListBoxItem>Eintrag 1</ListBoxItem><ListBoxItem>Eintrag 2</ListBoxItem></ListBox></Grid></Window>
Verwenden Sie dagegen ein StackPanel, werden die enthaltenen Elemente vertikal oder horizontal unter- bzw. nebeneinander angeordnet. Ausschlaggebend ist der Wert des Attributs Orientation (Abpictureung 3). Weitere Layout-Container sind z.B. das DockPanel (Ausrichtung an den Rändern und mittig), das Canvas (Positionierung über Koordinaten) oder das TabPanel (Registerkarten). Die Layout-Container können Sie natürlich (fast) beliebig ineinander verschachteln, um ein optimales Layout zu erreichen. Für eine genaue Positionierung der UI-Elemente innerhalb eines Container gibt es je Container spezifische Attribute, die dann in den Elementen angegeben werden, z.B. die Zeile und Spalte innerhalb eines Grids.
Auch zu jedem "XAML-Fenster" gehört eine Code-Behind-Datei, die allerdings zu Beginn keine weitere Funktionalität besitzt (Listing 4).
Listing 4
using ...namespace AvalonApp{public partial class Window1 : Window{public Window1(){InitializeComponent();}}}
Wenn Sie statt einer normalen "leichtgewichtigen" Anwendung eine Navigationsanwendung erstellen, werden statt Window- so genannte Page-Objekte für jede Seite der Navigation verwendet. Es wird dann über die automatisch angezeigten Navigationsschaltflächen oder manuell über entsprechenden Programm-Code zwischen den Seiten der Anwendung navigiert.
Neben den Avalon-Projekttypen gibt es auch neue Avalon-Dateitypen. Diese unterscheiden sich hauptsächlich darin, was für ein Layout-Container und was für eine Seitennavigation in einem Fenster verwendet werden. Aktuell stehen die Elemente Avalon PageFunction, Avalon FlowDocument, Avalon Page, Avalon Window und Avalon Custom Control zur Verfügung.
Seit der CTP vom März diesen Jahres wird über das XAMLPad eine Anwendung mit dem WinFX SDK bereitgestellt, über die interaktiv eine XAML-Datei erstellt werden kann (jedoch ohne Syntaxhilfe). Das Visual Studio bietet dagegen zwar IntelliSense, aber noch keinen grafischen Editor für XAML. Bleibt zu hoffen dass dies noch irgendwie zusammenwächst, aber bis zum Erscheinungstermin des fertigen Release ist ja noch ein bisschen Zeit.
Der Übersetzungsvorgang
Beim Übersetzungsvorgang eines Avalon-Projekts wird aus einer XAML-Datei zuerst eine Source-Datei generiert, die den Namen [Dateiname].g.cs hat. Aus MyApp.xaml wird also MyApp.g.cs. Diese Datei kann z.B. genutzt werden, um den aus der deskriptiven XAML-Beschreibung erzeugten Code zu betrachten. Das Visual Studio nutzt den Code, um Ihnen über den Debugger die Möglichkeit zu geben, eine XAML-Datei zu debuggen. Manuelle Änderungen gehen allerdings verloren, da die Dateien bei jeder Übersetzung neu erzeugt werden. Auch beim Auftreten von Exceptions werden Sie sich übrigens in diesen Dateien wieder finden, z.B. wenn Sie keine korrekte XAML-Datei erzeugt haben. Die generierten Source-Dateien werden dann übersetzt und mit der partiellen Klasse der Code-Behind-Datei gelinkt. Auf diese Weise entsteht aus Ihrer Oberflächenbeschreibung (XAML) und der Anwendungslogik (Code-Behind-Datei) eine einzige Anwendung, die nun nur noch erfolgreich vertrieben werden muss.Von Dirk Frischalowski ist vor kurzem sein erstes Buch zur Programmierung mit Java 5 erschienen. Außerdem beschäftigt er sich mit .NET und speziell mit dem neuen Programmiermodell WinFX von Longhorn. Darüber hinaus ist er als freier Systemberater bei Borland beschäftigt.
Links & Literatur
- [1] Lonhgorn Developer Center: msdn.microsoft.com/longhorn/default.aspx
- [2] WinRAR: www.winrar.de
- [3] Deamon Tools: www.daemon-tools.cc
- [4] Visual Studio 2005 Express Editions: lab.msdn.microsoft.com/express/


