Windows Presentation Foundation (WPF)
Eintrag zuletzt aktualisiert am: 04.11.2017
Fachbücher zum Thema Windows Presentation Foundation (WPF)
siehe Windows Presentation Foundation

Die Windows Presentation Foundation (WPF, Codename "
Avalon") ist eine Klassenbibliothek zur Entwicklung von graphischen Benutzeroberflächen (üblicherweise
GUI Framework genannt). WPF unterstützt verschiedene Arten von
GUIs in einer durchgängigen Bibliothek, insbesondere:
- Klassische Desktop-Fenster ("Windows")
- 3D-Grafiken (vgl. DirectX)
- Dokumente (vgl. Postscript und PDF)
- Browser-basierte Anwendungen (vgl. Macromedia Flash)
- Videos
Windows Presentation Foundation (WPF) kann als leistungsfähigere Nachfolger der
Windows Forms gesehen werden.
Windows Forms wird aber vorerst von Microsoft nicht aus .NET entfernt, sodass
Windows Forms-Anwendungen auch in der nahen bis mittleren Zukunft noch lauffähig sein werden. Aufgrund zahlreicher Herausforderungen mit WPF werden auch heute noch zahlreiche neue Anwendungen mit
Windows Forms entwickelt.
Versionsgeschichte
Die erste Version trug die Versionsnummer 3.0 und erschien im Rahmen von
.NET 3.0 im November 2006.
Zweite Version: 3.5 in
.NET 3.5: Dezember 2007
Erweiterungen in 3.5 SP1 in
.NET 3.5 SP1: August 2008
Erweiterungen (
Steuerelemente) im Rahmen des WPF Toolkits: Oktober 2008
Seit
.NET 4.0 ist jeweils mit dem .NET Framework eine neue WPF-Version mit (z.T- nur kleineren) Änderungen erschienen.
Eigenschaften von WPF
Oberflächen können wahlweise in Programmcode (wie in
Windows Forms) oder – bevorzugt – durch die
XML-basierte Extensible Application Markup Language (
XAML) definiert werden.
XAML fördert eine Trennung von Code und Gestaltung. In
Windows Forms wurde die Benutzerober-fläche durch Code beschrieben, der – auch wenn in einer eigenen "Designer-Datei" getrennt – doch sehr eng mit dem Programmcode verzahnt war. In WPF kann man durch
XAML viele Dinge ausdrücken (z.B.
Datenbindung), die in
Windows Forms nicht in der Designer-Datei untergebracht werden konnten. Für
Windows Forms gab es als einziges Gestaltungswerkzeug den in Visual Studio eingebauten Desig-ner. Für WPF gibt es eigene Produkte für die Oberflächengestalter, z.B.
Microsoft Expression Blend. Dadurch können Benutzeroberflächen von Anwendungen einfacher von ausgebildeten Gestaltern er-stellt werden. Bisher werden Benutzeroberflächen oft von Softwareentwicklern erstellt, denen es an ei-ner Ausbildung im Bereich Ästhetik und Benutzerfreundlichkeit fehlt.
WPF-Oberflächen laufen als eigenständige Windows-Fenster, im Fenster eines Webbrowsers oder in speziellen Ansichtswerkzeugen.
WPF-Anwendungen können als clientseitige Browser-Anwendungen laufen, verwenden dann jedoch kein
HTML, sondern setzen WPF auf dem Client voraus. Hier gibt es zwei Alternativen: Vollständiges WPF als
XML Browser Application (
XBAP) setzt ein vollständiges .NET Framework auf dem Client voraus. Silverlight bietet hingegen einen reduzierten Umfang von WPF und .NET und läuft auf mehr Plattformen.
Die Darstellung erfolgt intern über
DirectX.
Die Anzeige ist vektorbasiert und bietet daher eine gute Darstellung unabhängig von der Größe des Anzeigegeräts. (Um eine gute Darstellung auf allen Bildschirmgrößen und -auflösungen zu erzielen, verwendet WPF als Einheit sogenannte geräteunabhängige Pixel, die dem 96. Teil eines Inch entsprechen.)
Unterstützung für an die Fenstergröße anpassbare Anordnung der visuellen Elemente
Steuerelemente können sich der Größe ihres Inhalts anpassen.
Beliebige Komposition: Elemente lassen sich beliebige kombinieren, z.B. Kann ein Kontrollkästchen Teil einer Auswahlfeldes sein oder ein Video Hintergrund für eine Eingabefeld.
WPF bietet gegenüber
Windows Forms ein wesentlich ausgeprägteres Ereignissystem und eine Abs-traktion bei der Bindung von Oberflächenelemente an Befehle, durch das im aktuellen
Kontext nicht verfügbare Elemente sofort ausgeblendet werden.
Unterstützung für 2-D- und 3-D-Grafiken
Unterstützung für Navigationsanwendungen (Hyperlinks und Vor / Zurück im Stil einer Webanwen-dung)
Unterstützung für fest und flexibel umbrechende Dokumente (ohne Programmcode)
Deklarative
Datenbindung für alle Eigenschaften
Abspielen von Musik und Videos
Transformationen und Animation von Oberflächenelementen
Definition von wieder verwendbaren Formatvorlagen (Styles): Durch die Definition wiederverwendba-ren Formatvorlagen lassen sich einheitliche Gestaltungsmerkmale auf visuelle Elemente anwenden. Durch den Austausch der Formatvorlagen sind schnell gestalterische Anpassungen möglich – wie man es von
Cascading Style Sheets im Web kennt.
Definition von eigenen, wiederverwendbaren
Steuerelementen (
User Controls)
Installation über
Xcopy-Deployment, klassische Installationsroutinen (inklusive Microsoft
Windows Installer -
MSI) oder automatischen Download (einschließlich
Click-Once-Deployment)
WPF bietet eingebaute Interoperabilität zu Win32- und
Windows Forms-Benutzerschnittstellen, d. H., WPF-Anwendungen können
Windows Forms- oder Win32-
Steuerelemente enthalten. Umgekehrt ist ein WPF-
Steuerelement in Win32- oder
Windows Forms-Fenster einbindbar.
Herausforderungen/Probleme/Kritik bei WPF
Hardware-Anforderungen: Moderne Grafikkarte, RAM-Bedarf
Software-Anforderungen: Betriebssystem nicht älter als
Windows XPEinbußen bei Terminal Services (RAM-Bedarf auf Server +
Netzwerklast)
Leistungsprobleme bei großen Anzahl von Controls im UI
Fehlende "Business"-
Steuerelemente (nur Drittanbieter oder
Codeplex)
Nicht ausgereifte Designer in VS (aus der Sicht eines Softwareentwicklers)
Lokalisierung schlechter als bei
Windows Forms (Toolproblem)
Hoher Lernaufwand ("steile Lernkurve")
Schlechtere Produktivität (verglichen mit
Windows Forms)
Ausführlicher Text
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.
Eine herausragende Eigenschaft von WPF ist, dass die Darstellung komplett vektorbasiert ist. Daher lassen sich sehr einfach Anwendungen mit Vergrößerungsfunktionen (Zoom) erstellen bzw. Anwendungen, die auf unterschiedlichen Monitorgrößen nutzbar sind.
WPF-Anwendungen können entweder auf dem Zielsystem installiert werden oder im
Internet Explorer als herunterladbare Anwendung (Web Browser Application –
WBA) ablaufen. Dies sind aber keine echten Webanwendungen, denn eine
WBA erfordert das
.NET Framework 3.0 auf dem Client. Unter dem Namen Silverlight gibt es inzwischen eine stark reduzierte Version von WPF, die nur eine kleines Browser-Plug-In benötigt und dann auch ohne .NET Framework
XAML-basierte Oberflächen im Browser anzeigen kann.
WPF bietet eingebaute Interoperabilität zu Win32- und
Windows Forms-Benutzerschnittstellen, d.h. WPF-Anwendungen können
Windows Forms oder Win32-
Steuerelemente enthalten. Umgekehrt ist ein WPF-
Steuerelement in Win32- oder
Windows Forms-Fenster einbindbar.
Kritik an WPF ist hinsichtlich der verfügbaren
Steuerelemente zu üben. WPF besitzt weder in
.NET 3.0 noch in
.NET 3.5 Steuerelemente zur Darstellung von Daten in Tabelle (Datagrid) oder ein Auswahlfeld für Datum/Uhrzeit (Datetimepicker). Diese
Steuerelemente muss man entweder selbst entwickeln oder von Drittanbietern hinzukaufen. Microsoft hat erst für den späteren Verlauf des Jahres 2008 hier einen Nachtrag angekündigt [SG01]. Für Visual Studio 2005 gab es keine nennenswerte Designer-Unterstützung für WPF, in Visual Studio 2008 ist sie ebenfalls noch unbefriedigend.
[SG01] Scott Guthrie:
.NET 3.5 Client Product Roadmap
http://weblogs.asp.net/scottgu/archive/2008/02/19/net-3-5-client-product-roadmap.aspxEin Beispiel zu WPF
Den Startpunkt einer Anwendung markieren ein <Application>-Element und das StartingUp-Ereignis der gleichnamigen Klassen. Neben klassischen Windows-Fenstern kann der Entwickler mit WPF auch mehrseitige Navigationsanwendungen (vergleichbar mit der Bedienung von Web-Anwendungen) sowie Dokumente (ohne Programmcode) definieren. WPF-Dokumente sind ein Bestandteil von
XPS-Paketen (zu
XPS siehe Hauptext).
Die Gestaltung von Oberflächen erfolgt in
XAML durch so genannte
Panel-Elemente. Es gibt verschiedene Typen von
Panel-Elementen (z.B. Stack
Panel, Dock
Panel, Grid, Canvas, Tab
Panel), die ineinander verschachtelt sein können. Um eine gute Darstellung auf allen Bildschirmgrößen und -auflösungen zu erzielen, verwendet WPF als Einheit so genannte geräteunabhängigen Pixel, die dem 96. Teil eines Inches entsprechen. Durch Formatvorlagen (Styles) kann der Entwickler
Panel und
Steuerelemente auf einfache Weise einheitlich formatieren. Wie Listing 3 zeigt, können Styles durch Trigger an Ereignisse gebunden sein, sodass die Gestaltung sich bei Benutzeraktionen ändert, ohne dass der Entwickler dazu Programmcode schreiben muss.
XAML gestattet auch die deklarative Erstellung von Animationen (Listing 4).
Listing 1:
XAML-Code für eine einfache WPF-Anwendung
<Window x:Class="Hauptfenster"
xmlns="
http://schemas.microsoft.com/winfx/avalon/2005"
xmlns:x="
http://schemas.microsoft.com/winfx/xaml/2005"
Text="WPF-Demo von
Dr. Holger Schwichtenberg / www.IT-Visions.de" Width="600" Height="180"
>
<Stack
Panel>
<TextBlock FontSize="18" Foreground="Red" >Dies ist ein Beispiel für eine einfache
Avalon-Anwendung</TextBlock>
<TextBlock>Bitte geben Sie in die Textbox ihren Namen ein:</TextBlock>
<
TextBox Name="C_Name" Width="300" HorizontalAlignment="Left" Margin="0,10,10,10" ToolTip="Ihren Namen bitte hier eingeben!" Text="Holger Schwichtenberg">
</
TextBox>
<Stack
Panel Name="Schaltflaechen" Orientation="Horizontal">
<
Button Name="C_Start" VerticalAlignment="Top">
Start
</
Button>
<
Button Name="C_Ende" VerticalAlignment="Top" Width="100">
Ende
</
Button>
</Stack
Panel>
</Stack
Panel>
</Window>
Listing 2: Programmcode für die WPF-Anwendung aus Listing 1
Partial Public Class Hauptfenster
Inherits Window
Private Sub OnLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
Handles Me.Loaded
End Sub
Private Sub
ButtonClick1(ByVal sender As Object, ByVal e As RoutedEventArgs)
Handles C_Start.Click
Me.C_Start.RenderTransform = New System.Windows.Media.RotateTransform(10)
MsgBox("Hallo " & Me.C_Name.Text & "!")
Me.C_Start.RenderTransform = New System.Windows.Media.RotateTransform(0)
End Sub
Private Sub
ButtonClick2(ByVal sender As Object, ByVal e As RoutedEventArgs)
Handles C_Ende.Click
Me.Close()
End Sub
End Class
Listing 3: Anwendungsweite Formatvorlagen sorgen für eine einheitliche Gestaltung
<Application x:Class="MyApp"
xmlns="
http://schemas.microsoft.com/winfx/avalon/2005"
xmlns:x="
http://schemas.microsoft.com/winfx/xaml/2005"
>
<Application.Resources>
<Style TargetType="{x:Type
Button}">
<
Setter Property="Control.Foreground" Value="Red"/>
<
Setter Property="Control.Background" Value="Yellow"/>
<Style.Triggers>
<Trigger
Property="
Button.IsMouseOver" Value="true">
<
Setter Property = "Background" Value="Red"/>
<
Setter Property="Control.Foreground" Value="Yellow"/>
</Trigger>
</Style.Triggers>
</Style>
</Application.Resources>
</Application>
Listing 4: Die Ende-Schaltfläche soll zur Hervorhebung laufend Ihre Größe zwischen 50 und 100 Pixeln ändern.
<!-- Fortlaufende Animation für die Ende-Schaltfläche -->
<Window.Storyboards>
<
SetterTimeline TargetName="C_Ende" Path="(
Button.Width)">
<DoubleAnimation From="50" To="100" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" />
</
SetterTimeline>
</Window.Storyboards>