Windows Presentation Foundation - Eine Einführung


Die Windows Presentation Foundation (WPF) ist ein neues grafische Subsystem im .NET Framework 3.0. Anders als oftmals behauptet, hat WPF nichts mit Windows Vista zu tun und ist auch auf einem Rechner mit Windows XP SP 2 nutzbar. Der einzige Unterschied ist, dass die 3.0-Version des Frameworks direkt mit Windows Vista installiert wird.

Mit Einführung der WPF unternimmt Microsoft erste Schritte, die veralteten Vorgehensweisen für die Darstellung von Bildschirminhalten zu überarbeiten. Alle grafischen Elemente der WPF werden durch Direct3D realisiert, was wiederum eine Auslagerung des Bildaufbaus auf die Grafikkarte zur Folge hat. Obwohl moderne Rechner oft leistungsfähige Grafikhardware haben, war es bisher immer die CPU, die alleinig für den Bildaufbau des Windows Desktop verantwortlich war. WPF entlastet die CPU und übergibt den Aufbau von Fenstern und deren Inhalte an die Grafikkarte. Dabei werden überwiegend vektorbasierte Daten verwendet, die eine stufenlose Skalierung von Steuerelemente ohne Qualitätsverlust ermöglicht.

Im Unterschied zu seinen Vorgängertechnologien arbeitet die WPF nicht mehr mit Pixeln als Maßeinheit. Alle Angaben werden in logischen Einheiten gemacht, was zur Folge hat, dass Programmfenster bei hochauflösenden Bildschirmen nicht keiner werden, sondern bei gleichbleibender Größe eine höhere Qualität liefern. Bei einer Auflösung von 96dpi entspricht eine logische Einheit jedoch einem Pixel.

Für einen Entwickler ist einer der Schwerpunkte der WPF eine Sprache mit Namen XAML (Extensible Application Markup Language), eine auf XML basierte Sprache zur Deklaration von Objekten und deren Eigenschaften. XML ist jedoch keine Programmiersprache, sondern lediglich eine Auszeichnungssprache. Für die Funktionalität im Hintergrund benötigt man immer noch C# oder eine andere Programmiersprache, obwohl sich Dinge wie Data-Binding oder Animationen durchaus direkt im XAML-Code realisieren lassen. XAML dient aber überwiegend zur Layout-Definition, ähnlich wie HTML dies für Webseiten tut. Entwickler mit Kenntnissen in HTML sollten sich deshalb auch mit XAML-Code zurechtfinden. Auch dort werden für die Deklarationen öffnende und schließende Tags verwendet.

Einer der Vorteile, die für die Verwendung von XAML sprechen, ist die Trennung von Design und Funktionalität. So ist es vorstellbar, dass Grafiker das Aussehen eines Programms bestimmen und Softwareentwickler nur noch die Programmlogik implementieren. Etwas leistungsstärker als der Designer im Visual Studio ist „Expression Blend“, vormals „Expression Interactive Designer“. Dort kann eine Benutzeroberfläche »gezeichnet« werden und der Entwickler kann später dieses Design in sein Programm einbinden. Blend ist sogar in der Lage, direkt Visual Studio Projekte zu laden.

Nötig ist ein Programm nicht. Man kann XAML-Deklarationen von Hand schreiben. Soll zum Beispiel eine Schaltfläche definiert werden, sähe das im XAML-Code so aus:

<Button Name="button1">Hier Klicken</Button>

Anschließend ist es ein Leichtes im C#-Code ein Ereignis (event) an zu hängen und auf Eingaben eines Benutzers zu reagieren. Wichtig ist hierfür nur, dass der Schaltfläche ein Name zugewiesen wurde. Die Konstruktor-Methode des Fensters, in dem die Schaltfläche eingefügt wurde, ist in der Regel ein guter Ort um Ereignisse fest zu legen.

public Window1() 

   InitializeComponent(); 

   button1.Click += new RoutedEventHandler(OnButton1Click); 

}

Die aufzurufende Methode könnte dann wie folgt aussehen:

void OnButton1Click(object sender, RoutedEventArgs e) 

    MessageBox.Show("geklickt"); 

}

Es gibt eine Alternative zu dieser Vorgehensweise, denn schon im XAML-Code können die Methoden zur Ereignissteuerung festgelegt werden. Wie hier für das Klick-Ereignis.

<Button Name="button1" Click="OnButton1Click">Hier Klicken</Button>

Diese Art der Ereignissteuerung hat allerdings einen entscheidenden Nachteil. Zwar kann man einem Grafiker zutrauen einen passenden Methodennamen zu wählen, aber diese Methode muss im Programmcode vorhanden sein. Ist dies nicht der Fall, lässt sich das Programm nicht ausführen. Ein Programm schrittweise aufzubauen ist dann schwierig. Die strikte Trennung zwischen Layout und Funktion ist bei dieser Vorgehensweise deshalb etwas eingeschränkt.

WPF-Steuerelemente sind ‚lookless', das heißt sie haben kein Aussehen. Dass man aber trotzdem etwas zu sehen bekommt, wenn man einen Button deklariert, liegt daran, dass für alle Steuerelemente ein Standarddesign mitgeliefert wird. Aber die optische Erscheinung eines Steuerelements hat mit der Funktionalität nichts zu tun und kann beliebig manipuliert werden.


Geschrieben am: 18.03.2007
Technologien: C#, WPF, Windows, .NET