# 17 WPF – Die Grundlagen Mit dem .NET Framework 3.0 wurde eine neue Programmierschnittstelle für Windows-Anwendungen eingeführt, die sich Windows Presentation Foundation (WPF) nannte. Mit Visual Studio 2008 wurde WPF neben anderen neuen Technologien fest in die Entwicklungsumgebung integriert. Mit WPF lassen sich grafische Benutzeroberflächen entwickeln, ähnlich wie mit der altbekannten WinForm-API. Im Gegensatz zur WinForm-API trennt die WPF die Präsentations- und Geschäftslogik (den Code also) nach strengen Richtlinien, die auf der Beschreibungssprache XAML basieren. In den kommenden Kapiteln werden wir uns mit WPF beschäftigen. Dabei können wir nicht alle Aspekte und Konzepte berücksichtigen. Aber ich möchte Ihnen einen Einstieg in die neue Technologie geben und Ihnen zeigen, wie Windows-Anwendungen in Zukunft entwickelt werden. Sie werden feststellen, dass die Lernkurve nicht so steil ist wie bei den nun in die Tage kommenden WinForms. Neben den Kenntnissen in der Programmierung müssen Sie allerdings mit XAML eine neue »Sprache« lernen, mit der die Oberflächen in WPF gestaltet werden. Das sollte Sie nicht abschrecken, die ersten Schritte zu wagen, denn die Möglichkeiten, mit WPF eine optisch hervorstechende und dabei hochflexible Anwendung auszuliefern, überschreiten bei Weitem die, die uns bisher mit den WinForms zur Verfügung standen. ## 17.1 Merkmale einer WPF-Anwendung Am Anfang stellt sich natürlich zuerst die Frage, welche typischen Charakteristika eine WPF-Anwendung auszeichnen und wo die Vorteile im Vergleich zu den WinForms zu suchen sind. Die folgende Liste soll diese Fragen beantworten. Die Benutzeroberfläche wird mit einer an XML angelehnten Sprache beschrieben: mit XAML (eXtensible Application Markup Language, gesprochen Xemmel). Dadurch wird es möglich, die Beschreibung der Benutzeroberfläche vom Code strikt zu trennen – ähnlich wie es mit ASP.NET bereits seit Jahren mit dem sogenannten Code-Behind-Modell der Fall ist. Grundsätzlich besteht die Möglichkeit, eine Benutzeroberfläche bereitzustellen, die entweder in einem herkömmlichen Fenster oder im Browser angezeigt wird. WPF-Anwendungen bieten eine umfangreiche Unterstützung von 2D- und 3D-Grafiken. Dabei wird die schnelle Grafikausgabe durch DirectX genutzt. Das wiederum bedeutet, dass die Grafikkarte zur Berechnung der grafischen Elemente herangezogen wird und zu einer deutlich verbesserten Performance führt. Die Ausgabe ist vektorbasiert. Das bedeutet, dass auch beim Skalieren keine hässlichen Pixel zu sehen sind, sondern immer ein fließender Verlauf der grafischen Darstellung. WPF-Anwendungen bieten vielfältige grafische Unterstützung (z. B. zur Darstellung der Steuerelemente, für Animationen) sowie Unterstützung von Videos, Bildern und Audio-Dateien. WPF-Anwendungen bieten vielfältige Datenbindungsmöglichkeiten für die Komponenten. Das ist mit Sicherheit eine der stärksten Seiten der WPF. Im Vergleich zur WinForm-API gibt es neue Layoutoptionen durch die Verschachtelung der Elemente. XAML ist ausgesprochen mächtig und offenbart erstaunliche Fähigkeiten. Zusammen mit den in WPF eingeführten Konzepten werden Sie vergleichsweise wenig Programmcode schreiben, sondern sich mehr auf XAML konzentrieren. Die Folge wird sein, dass der XAML-Code sehr umfangreich werden kann, während der reine C#-Code sich nur noch auf wenige Operationen beschränkt. Welcher Technologie sollte man den Vorzug geben, wenn man mit der Entwicklung einer Windows-Anwendung im allgemeinen Sinne des Begriffs startet: den WinForms oder WPF? Die grafischen Fähigkeiten von WPF stellen alles Vergangene deutlich in den Schatten. Wollen Sie runde Buttons? Kein Problem. Wollen Sie runde Fenster? Ebenfalls kein Problem. Neben den Vorteilen der grafischen Gestaltung können auch andere Gesichtspunkte wie z. B. die umfangreichen Datenbindungsmöglichkeiten die Entscheidung für die WPF und somit gegen die WinForm-API beeinflussen. Darüber hinaus muss bei der Entscheidungsfindung auch noch berücksichtigt werden, dass Microsoft die WinForm-API nicht mehr weiterverfolgt und voll auf WPF setzt, die inzwischen bekanntermaßen auch schon in Silverlight eingeflossen ist.