43
WINDOWS PRESENTATION FOUNDATION (WPF) Martin Kühn 08.03.2012

Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

  • Upload
    tranthu

  • View
    233

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

WINDOWS PRESENTATION FOUNDATION (WPF)

Martin Kühn

08.03.2012

Page 2: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Übersicht

• Theorie hinter WPF

• Grundlagen von XAML

• Dependency Properties

• Templates

• Vortragsdauer: ca. 30 Minuten

Page 3: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

THEORIE HINTER WPF

Page 4: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Theorie hinter WPF

• WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken

• Ähnlich wie das Qt-Framework oder GTK+

Beispiel-Formular in einer WPF-Anwendung:

Page 5: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Theorie hinter WPF

• Formulare lassen sich in der auf XML basierenden Sprache XAML beschreiben

Page 6: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Theorie hinter WPF

• Basiskonzept: Trennung von Präsentationsebene und Programmierebene

• XAML-Datei beschreibt Formulardaten

• XAML-Datei hat Code-Behind (z.B. in C#) der den Programmiercode enthält Formularbeschreibung

Code-Behind

Page 7: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Theorie hinter WPF

• WPF ist ein mächtiges und umfangreiches Werkzeug zur Erstellung von GUIs für Desktop- und Webanwendungen

• Teil des .NET-Frameworks seit Version 3.0

• Verwendbar mit Visual Studio 2010 und Microsoft Expression Blend

Page 8: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Theorie hinter WPF

Wie erstelle ich eine WPF-Anwendung?

Page 9: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

GRUNDLAGEN VON XAML

Page 10: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML

• XAML = Extensible Application Markup Language

• Beschreibungssprache für Formulare

• Case-sensitive

• XML-basierend

Page 11: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML

• Jede WPF-Anwendung besteht aus einer App.xaml die den Einstiegspunkt des Programmes darstellt (ähnlich der Main-Methode in Java)

• In ihr lassen sich anwendungsweit Ressourcen (Icons, Grafiken, Farben, etc.) festlegen

Page 12: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML

• Jedes Formular (also jedes Fenster und jeder Dialog) wird in einer eigenen XAML-Datei definiert

Page 13: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML Syntax und Sprachaufbau von XAML:

• Tags beschreiben u.a. die GUI-Elemente. Sie werden mit <…> eingeleitet und mit </…> geschlossen. Zwischen den Tags lässt sich meist der Inhalt von Elementen definieren:

<Button>OK</Button>

• Im Anfangstag lassen sich die Properties der Steuerelemente festlegen:

<Button Width=„200“ Height=„50“>Hallo</Button>

• Ist bei manchen Elementen der Inhalt nur über eine Zahl oder einen String definiert, lässt er sich meistens auch über die Content, Text o.Ä. Eigenschaft festlegen. Das Tag kann dann selbstschließend mit <… /> sein. Das folgende Beispiel ist äquivalent zum oberen:

<Button Content=„Hallo“ Width=„200“ Height=„50“ />

Page 14: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Alle Properties von Steuerelementen können auch im Visual Studio-Eigenschaftenfenster geändert werden:

Page 15: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML

Rumpf einer XAML-Datei

Window-Tag definiert ein Fenster

Standard XAML-Namensräume (xmlns = XML namespace)

Fenstertitel

Minimale und tatsächliche Größe des Fensters

Das Fenster soll beim Starten in der Mitte des Bildschirms platziert werden

Ein Grid ist ein Container in dem Steuerelemente platziert werden können

Page 16: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML Übersicht der wichtigsten Steuerelemente

Button <Button Content="OK“ /> TextBox <TextBox Text=“Hallo“ />

TextBlock / Label <TextBlock Text=“Please…“ />

CheckBox <CheckBox Text=“Heute…“

IsChecked=“True” />

RadioButton <RadioButton Content=“Rinderhaxe”

IsChecked=“True”

GroupName=“1” />

<RadioButton Content=“Schweine…”

GroupName=“1” />

ListBox <ListBox>

<ListBoxItem Content=“Bier” />

<ListBoxItem Content=“Korn” />

<ListBoxItem Content=“Absinth” />

</ListBox>

Page 17: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML Übersicht der wichtigsten Container Container steuern die Anordnung der Steuerelemente

StackPanel Grid DockPanel

Page 18: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML

Margin-Eigenschaft von Steuerelementen

• Eigenschaft die jedes Steuerelement hat

• Sie beschreibt die Entfernung zwischen Element und seinem übergeordnetem Element oder Nachbarelementen

• Nützlich um Lücken zwischen die Steuerelemente einzufügen

Page 19: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Grundlagen von XAML

Programmierbeispiel:

Einfache Anwendung, die bei Klick auf einen

Button eine MessageBox ausgibt

Page 20: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

DEPENDENCY PROPERTIES

Page 21: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Dependency Properties

• Mit Dependency Properties können Properties von Steuerelementen an andere Properties gebunden werden

• Man kann z.B. eine TextBox mit einem String verbinden oder eine CheckBox mit einem Boolean

• Enorme Arbeitserleichterung

Beispiel: Binde die IsEnabled Eigenschaft eines Textfeldes an den Zustand einer Checkbox:

Page 22: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Dependency Properties

Beispielprogramm

Page 23: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Dependency Properties

Definieren in der Code-Behind Datei eine Property und eine DependencyProperty:

Name der Property

Datentyp der Property

Datentyp des Owners

Page 24: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Dependency Properties

Der DataContext des Window muss auf sich selbst gesetzt werden, damit bekannt ist worauf sich die folgenden Property-Angaben beziehen.

Page 25: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Dependency Properties

Verbinden im XAML-Code die beiden Steuerelemente:

Name der Property

Bindungsrichtung

Update-Trigger

Page 26: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Dependency Properties

Bindungsrichtungen: • OneWay: Daten werden aus der Property in das Steuerelement gelesen

• OneWayToSource: Daten aus dem Steuerelement werden in das Property geschrieben

• TwoWay: Daten werden aus dem Property in das Steuerelement gelesen, aber Änderungen im Steuerelement werden auch in die Property geschrieben

Quelle (Property: EnableTextBox)

Ziel (Property: TextBox.IsEnabled)

Quelle (Property: EnableTextBox)

Ziel (Property: CheckBox.IsChecked)

Quelle Ziel

Page 27: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Dependency Properties

Update-Trigger:

• PropertyChanged: Die Bindungen zu einer Property werden bei deren Änderung aktualisiert.

(z.B. beim Tippen des Textes in einer TextBox)

• LostFocus: Die Bindung zu einer Property wird aktualisiert, wenn das Steuerelement den Fokus verliert

(z.B. wenn eine TextBox abgewählt wird)

Page 28: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Dependency Properties

Beispielprogramm

Page 29: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

TEMPLATES

Page 30: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates

• Manchmal möchte man den Steuerelementen ein individuelles Aussehen verpassen

• Oder man möchte ganz neue Steuerelemente erstellen

• Templates ermöglichen Anpassung bis ins kleinste Detail

• Microsoft Expression Blend sehr nützlich für die Bearbeitung von Templates

Page 31: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates

Wir wollen im folgenden als Beispiel einen eigenen Button „templaten“, d.h. ihm einen individuellen Look verpassen:

Page 32: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates • Templates sind in WPF Ressourcen

• Werden in der Window.Resources-Umgebung in einem ResourceDictionary gespeichert

Page 33: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates

• Legen zunächst eine Farbe für die Umrandung des Buttons fest

• Farben werden in WPF als SolidColorBrush (ebenfalls Ressourcen) gespeichert

• Die Farbe (hier blau) wird als Hexwert in die Color-Eigenschaft geschrieben

Page 34: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates

• Hintergrund soll ein Farbverlauf von weiß nach blau sein

• Farbverläufe können in WPF als LinearGradientBrush definiert werden

• Anfangs- und Endfarbe werden mittels GradientStop definiert

Page 35: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates

• Button soll seine Optik beim Überfahren mit der Maus (Hover) verändern

• Button soll seine Optik beim Klick verändern

• Definieren auch hierfür jeweils Farbverläufe

Page 36: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates • Setzen nun aus den Farben und Farbverläufen unser ControlTemplate für

den Button zusammen (zunächst nur den Standard-Look)

• Border definiert eine Fläche mit einer Kontur (BorderBrush) und einem Hintergrund (Background)

• Mittels StaticResource lassen sich die vordefinierten Ressourcen abrufen

• Das ContentControl definiert das Text-Label im Button

Page 37: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates

• Legen zu guter Letzt im Template unsere vordefinierten Hintergründe

beim Überfahren und Klicken mit der Maus fest

• Mittels Trigger lässt sich der Zustand eines Steuerelementes überwachen und ein Ereignis auslösen

• Mittels Setter lassen sich im XAML-Code Properties eines Steuerelementes neue Werte zuweisen

Page 38: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Templates

Beispielprogramm

Page 39: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

ABSCHLUSS

Page 40: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Fazit • WPF ist ein mächtiges Tool zur Erstellung von GUIs

• XAML zur Beschreibung von Formularen

• Dependency Properties und Templating verfügbar

Was nützt uns das bei der Spieleprogrammierung?

• Ermöglicht es uns individuelle Menüs und Einstellungsdialoge zu erstellen

• Hilfreich für die Entwicklung von Tools wie eigene Programmierumgebungen oder z.B. Level-Editoren

Page 41: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

Ressourcen

• Wikipedia (DE/EN)

• http://www.stackoverflow.com

• http://www.gowinfx.de/WPF%20Tutorial/kap1.html

• http://openbook.galileocomputing.de/visual_csharp_2010/visual_csharp_2010_17_001.htm

• Tutorials zu den einzelnen Steuerelementen sehr leicht bei Google zu finden: „wpf “ + Steuerelementname

Page 42: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

DANKE FÜRS ZUHÖREN!

Page 43: Martin Kühn 08.03 - Draphony Games wpf.pdf · Theorie hinter WPF •WPF ist ein Framework zur Beschreibung von GUI-Formularen und Grafiken •Ähnlich wie das Qt-Framework oder GTK+

FRAGEN?