C# für Einsteiger - edenmarket.de · C# f ü r Quereinsteiger ©eden market GmbH Max-Brod-Weg 14 D...

Post on 17-Sep-2018

215 views 0 download

Transcript of C# für Einsteiger - edenmarket.de · C# f ü r Quereinsteiger ©eden market GmbH Max-Brod-Weg 14 D...

1

C# für EinsteigerModul 10: Oberflächen mit WPF

© 2009 eden market

Autor: Anton Kölbl

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

2

Gliederung

1. Einleitung

2. XAML

3. Grafik

4. Databinding

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

3

Einleitung

Die Windows Presentation Foundation WPF sindwichtig(st)er Bestandteil von .NET 3.0; früher waren die Bezeichnungen Avalon und WinFX gebräuchlich.

Sie stellen ein API für anspruchsvolle Benutzeroberflächenzur Verfügung. Möglich sind z.B.

• 3D-Darstellungen

• Abspielen von Videos (mit Windows Media Player 10)

• Datenbindung

• Animationen

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

4

Einleitung

Nur noch Betriebssysteme ab XP werden unterstützt.

Technisch wird Ballast abgeworfen:

• Kein Aufsatz auf Windows SDK wie Windows.Forms

• Komponenten werden direkt über WPF gezeichnet

• Layout wird in XML definiert

• Weitergehende Verwendung von Ressourcen

• Grafik auf Vektorbasis unabhängig von Auflösung

• WPF/E (“Everywhere”) durch Silverlight auch für Browser

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

5

Einleitung

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

6

Einleitung

Längere Zeit werden die Windows.Forms und WPF parallel existieren. WPF sollte v.a. für sehr anspruchsvolle(Multimedia-)Oberflächen eingesetzt werden.

Grafik kann dann separat vom Code durch Designer entworfen werden.

Hierzu neue Expression-Produktreihe von Microsoft.

Speziell Expression Blend für XAML.

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

7

Einleitung

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

8

Einleitung

Für die Entwicklung gibt es drei Varianten:

• Code

• XAML

• XAML+Code

Ab einer gewissen Projektgröße ist nur noch die dritteVariante sinnvoll.

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

9

Einleitung

Vorgehensweise nur mit Code:

• Projekttyp WPF Application, .xaml-Dateien löschen

• Klasse von System.Windows.Window ableiten

class Window1: Window {

public Window1()

{ Title = "Ein erstes Fenster";

Width = 200; Height = 100;

}

[STAThread()]

public static void Main()

{ new Application().Run(new Window1()); }

}

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

10

Einleitung

Vorgehensweise nur mit XAML:

• selber Projekttyp, .cs-Dateien löschen

• jetzt Informationen in 2 XML-Dateien

<WindowWindowWindowWindow x:Class="WpfApplicationXaml.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Fenster aus XAML" Height="300" Width="300" />

<ApplicationApplicationApplicationApplication x:Class="WpfApplicationXaml.App"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

StartupUri="Window1.xaml"StartupUri="Window1.xaml"StartupUri="Window1.xaml"StartupUri="Window1.xaml" />

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

11

Einleitung

Vorgehensweise Code und XAML gemischt:

• Projekttyp WPF Application

• erzeugt– C# für Logik (Code-behind)

– XAML für UI

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

12

Gliederung

1. Einleitung

2. XAML

3. Grafik

4. Databinding

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

13

XAML

XAML ist ein neuer XML-Dialekt

Ziel:

• Trennung von Logik und UI

• UI wird von Designer erzeugt

• XAML kann von Tools generiert werden

• dann z.B. Import in Visual Studio

Zwei Namensräume werden benötigt:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

14

XAML

XAML definiert den Inhalteines Fensters:

Container gruppierenmehrere Komponenten

<Window>

<StackPanel>

<Button Content="Click Me"/>

</StackPanel>

</Window>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

15

XAML

Events können beim Button direkt durch Doppelclickerzeugt werden.

Methode wird in Code-behind-Klasse erzeugt:

private void Button_Click(object sender, RoutedEventArgs e)

{

MessageBox.Show("Test");

}

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

16

XAML

Properties und Events können oft direkt als XML-Attribute angegeben werden; dies ist aber nur bei Strings möglich.

<Button Content="Click Me" ClickClickClickClick="Button_Click" />

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

17

XAML

Eine alternative Syntax mit Unterelementen ist immermöglich.

<Button>

<Button.BackgroundButton.BackgroundButton.BackgroundButton.Background><SolidColorBrush Color="Blue"/> </Button.Background> <Button.ForegroundButton.ForegroundButton.ForegroundButton.Foreground> <SolidColorBrush Color="Red"/> </Button.Foreground> <Button.ContentButton.ContentButton.ContentButton.Content> This is a button </Button.Content>

</Button>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

18

XAML

Manche komplexen Werte können über TypeConverterautomatisch umgewandelt werden. Folgende Variantensind äquivalent:

<Button Margin="10,20,10,30" Content="Hallo"/>

<Button Content="Hallo">

<Button.Margin>

<Thickness Left="10" Top="20" Right="10" Bottom="30"/> </Button.Margin>

</Button>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

19

Übung 10, Aufgabe 1

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

20

XAML

Properties stammen oft von (evt. abstrakten) Basisklassen, deshalb ist normale XML-Validierung mitXAML nicht möglich -> spezielle Tools notwendig

Einige Properties können an alle Komponentenangehängt werden -> Elternelemente werden nichtüberfrachtet

<DockPanel>

<Button DockPanel.DockDockPanel.DockDockPanel.DockDockPanel.Dock="Left" Width="100" Height="20">left</Button>

<Button DockPanel.DockDockPanel.DockDockPanel.DockDockPanel.Dock="Right" Width="100" Height="20">right</Button>

</DockPanel>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

21

XAML

XAML kann zur Laufzeit geschrieben und auch in die laufende Anwendung eingelesen werden:

Button origianlButton = ...

string savedButton = XamlWriter.SaveXamlWriter.SaveXamlWriter.SaveXamlWriter.Save(origianlButton);

StringReader stringReader = new StringReader(savedButton);

XmlReader xmlReader = XmlReader.Create(stringReader);

Button readerLoadButton = (Button) XamlReader.LoadXamlReader.LoadXamlReader.LoadXamlReader.Load(xmlReader);

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

22

XAML

XAML-Container stammen von der abstrakten KlassePanel in System.Windows.Controls ab.

Kindelemente sind in einer Collection Children untergebracht (muss in XML aber nicht angegebenwerden).

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

23

XAML

Canvas ist ein Container, dessen Kindelemente an den Seiten verankert werden können.

Bei Überdeckungen der Kinder kann man die Property ZIndex definieren.

<CanvasCanvasCanvasCanvas Background="LightSteelBlue">

<TextBlock FontSize="14" Canvas.TopCanvas.TopCanvas.TopCanvas.Top="100" Canvas.LeftCanvas.LeftCanvas.LeftCanvas.Left="10">Sonne</TextBlock>

<TextBlock FontSize="22" Canvas.Top="200" Canvas.Left="75">Mond</TextBlock>

</Canvas>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

24

XAML

Prinzipiell könnte alles auch immer rein mit Code erreicht werden, ist aber meist umständlicher.

TextBlock txt1 = new TextBlock();

txt1.FontSize = 14;

txt1.Text = "Sonne";

Canvas.SetTop(txt1, 100);

Canvas.SetLeft(txt1, 10);

myCanvas.Children.Add(txt1);

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

25

XAML

Beim StackPanel werden die Kinder nacheinanderangeordnet (standardmäßig vertikal, Property Orientation kontrolliert das).

<StackPanelStackPanelStackPanelStackPanel>

<Border Background="SkyBlue" BorderBrush="Black" BorderThickness="1">

<TextBlock Foreground="Black" FontSize="12">Sonne</TextBlock>

</Border>

<Border Width="400" Background="CadetBlue" BorderBrush="Black" BorderThickness="1">

<TextBlock Foreground="Black" FontSize="14">Mond</TextBlock>

</Border>

...

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

26

XAML

Beim DockPanel werden die Kinder an den 4 Seiten und in der Mitte angeordnet (vgl. BorderLayout in Java).

<DockPanelDockPanelDockPanelDockPanel LastChildFill="True">

<Border Height="25" Background="SkyBlue" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="TopDockPanel.Dock="TopDockPanel.Dock="TopDockPanel.Dock="Top"""">

<TextBlock Foreground="Black">Dock = "Top"</TextBlock>

</Border>

<Border Height="25" Background="SkyBlue" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="TopDockPanel.Dock="TopDockPanel.Dock="TopDockPanel.Dock="Top"""">

<TextBlock Foreground="Black">Dock = "Top"</TextBlock>

</Border>

<Border Height="25" Background="LemonChiffon" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="BottomDockPanel.Dock="BottomDockPanel.Dock="BottomDockPanel.Dock="Bottom""""> <TextBlock Foreground="Black">Dock = "Bottom"</TextBlock>

</Border>

...

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

27

XAML

Beim Grid kann eine Tabellenstruktur definiert werden.

<GridGridGridGrid VerticalAlignment="Top" HorizontalAlignment="Left" ShowGridLines="True" Width="250" Height="100"> <Grid.ColumnDefinitionsGrid.ColumnDefinitionsGrid.ColumnDefinitionsGrid.ColumnDefinitions>

<ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition />

</Grid.ColumnDefinitions>

<Grid.RowDefinitionsGrid.RowDefinitionsGrid.RowDefinitionsGrid.RowDefinitions>

<RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition />

</Grid.RowDefinitions>

<TextBlock FontSize="20" FontWeight="Bold" Grid.ColumnSpanGrid.ColumnSpanGrid.ColumnSpanGrid.ColumnSpan="3" Grid.RowGrid.RowGrid.RowGrid.Row="0">2005 Products Shipped</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="0">Quarter 1</TextBlock>

<TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="1">Quarter 2</TextBlock>

<TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="2">Quarter 3</TextBlock>

<TextBlock Grid.Row="2" Grid.Column="0">50000</TextBlock>

...

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

28

XAML

Im Container können die Komponenten plaziert werden. Sie erben von Control viele Eigenschaften:

• Background, Foreground

• Height, Width

• Name

• FontFamily, FontSize, FontStyle

• Cursor, Tooltip

• Margin, Padding

• Opacity, Visibility …

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

29

XAML

Standardkomponenten sind z.B.

• Label, TextBox, PasswordBox

• Button, CheckBox, RadioButton

• Menu, MenuItem

• ListBox, ComboBox

• ScrollBar, ScrollViewer

<StackPanel>

<RadioButton GroupName="colorgrp">Red</RadioButton>

<RadioButton GroupName="colorgrp">Blue</RadioButton>

<RadioButton GroupName="numgrp">1</RadioButton>

<RadioButton GroupName="numgrp">2</RadioButton>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

30

XAML

Zusatzkomponenten sind z.B.

• ViewBox für Skalierungen

• Border

• BulletDecorator

• GroupBox

• Expander zum Auf- und Zuklappen

• Image, MediaElement

• Popup

• ProgressBar, StatusBar, ToolBar

• ToolTip

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

31

Gliederung

1. Einleitung

2. XAML

3. Grafik

4. Databinding

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

32

Grafik

Es gibt herausragende Fähigkeiten in den Bereichen

• 2D

• Bildbearbeitung

• Textdarstellung

• 3D

• Videos

Diese dürften meistens das entscheidende Kriterium fürden Einsatz von WPF darstellen.

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

33

Grafik

2D-Operationen rechnen in einer geräteunabhängigenEinheit (Device Independent Pixel) der Größe 1/96 Inch.

Auf dem Bildschirm wird das je nach dpi skaliert.

Folgende Grundformen (von Shape abgeleitet)

Line, Rectangle, Ellipse, Polyline, Polygon, Path

Alle können direkt als Komponente verwendet werden(da von UIElement abgeleitet).

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

34

Grafik

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

35

Grafik

Gemeinsame Eigenschaften der 2D-Formen:

• Stroke für den Umriss

• StrokeThickness

• Fill

Canvas ist sehr gut als Container geeignet.

<Canvas Height="300" Width="300">

<Line X1="10" Y1="10" X2="50" Y2="50" StrokeStrokeStrokeStroke="Black" StrokeThicknessStrokeThicknessStrokeThicknessStrokeThickness="4" />

...

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

36

Grafik

Affine Transformationenkönnen angewendetwerden:

<Polyline Points="25,25 0,50 25,75 50,50 25,25 25,0" Stroke="Blue" StrokeThickness="10" Canvas.Left="75" Canvas.Top="50">

<Polyline.RenderTransform>

<RotateTransform CenterX="0" CenterY="0" Angle="22" /> </Polyline.RenderTransform>

</Polyline>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

37

Grafik

Animationen über Mausevents(Farbe / Durchsichtigkeit ändertsich)

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

38

Grafik

Farbverläufe können als Füllungeingesetzt werden (auch rund)

<Rectangle Width="200" Height="100">

<Rectangle.Fill>

<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">

<GradientStop Color="Yellow" Offset="0.0" />

<GradientStop Color="Red" Offset="0.25" />

<GradientStop Color="Blue" Offset="0.75" />

<GradientStop Color="LimeGreen" Offset="1.0" />

</LinearGradientBrush>

</Rectangle.Fill>

</Rectangle>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

39

Grafik

Bei der Bildbearbeitung stellt schon die StandardklasseImage viele Möglichkeiten bereit. Folgende Formatekönnen angezeigt werden:

• bmp

• gif

• ico

• jpg

• png

• tiff

• wdp (Windows Media Photo)

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

40

Grafik

Ausschnitte können über CroppedBitmap gewähltwerden:

<Image Width="200" Grid.Column="0" Grid.Row="3" Margin="5"> <Image.Source>

<CroppedBitmap Source="{StaticResource croppedImage}" SourceRect="30 0 75 50"/>

</Image.Source>

</Image>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

41

Grafik

Bitmapeffekte

• BlurBitmapEffect

• OuterGlowBitmapEffect

• DropShadowBitmapEffect

<Button Margin="50" Width="200">DropShadow

<Button.BitmapEffectButton.BitmapEffectButton.BitmapEffectButton.BitmapEffect>

<DropShadowBitmapEffectDropShadowBitmapEffectDropShadowBitmapEffectDropShadowBitmapEffect Color="Black"

Direction="320" ShadowDepth="25"

Softness="1" Opacity="0.5"/>

</Button.BitmapEffect>

</Button>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

42

Grafik

Textverarbeitung: TextBox füreinfachen Text, TextBlock mitInlineCollection für unterschiedlicheFormatierungen.

Beide können als Beschriftungverwendet werden, z.B. für Buttons.

<TextBlock TextBlock TextBlock TextBlock Name="textBlock1" TextWrapping="Wrap">

<Bold>TextBlock</Bold> is designed to be <Italic>lightweight</Italic>,

and is geared specifically at integrating <Italic>small</Italic> portions

of flow content into a UI.

</TextBlock>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

43

Grafik

Texteffekte sind möglich:

• Rotation

• Unter-, Durch-, Überstreichen

<TextBlock FontSize="36">the lazy brown dog.

<TextBlock.TextDecorations>

<TextDecorationCollection>

<TextDecoration

PenThicknessUnit="FontRecommended">

<TextDecoration.Pen>

<Pen Thickness="1.5">

<Pen.Brush> ...

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

44

Grafik

Für größere Dokumente:

• FixedDocument

• FlowDocument

Jeweils mit Viewerkomponentenz.B. in XPS

<FlowDocument>

<Paragraph FontSize="18">Flow Format Example</Paragraph> ...

<List>

<ListItem>

<Paragraph>ListItem 1</Paragraph> ...

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

45

Grafik

3D-Darstellungen können in ViewPort3D eingebettet werden:

<Canvas Width="321" Height="201">

<Viewport3D ClipToBounds="True" Width="150" Height="150" Canvas.Left="0" Canvas.Top="10">

<Viewport3D.Camera>

<PerspectiveCamera Position="0,0,2" LookDirection="0,0,-1" FieldOfView="60" />

</Viewport3D.Camera>

<Viewport3D.Children> ...

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

46

Grafik

Eine VisualBrush kann als Füllung Videos abspielen(MediaPlayer als Backend).

<TextBlock FontSize="100pt" Text="Some Text" FontWeight="Bold">

<TextBlock.Foreground>

<VisualBrushVisualBrushVisualBrushVisualBrush>

<VisualBrush.Visual>

<MediaElementMediaElementMediaElementMediaElement Source="Video.wmf" />

</VisualBrush.Visual>

</VisualBrush>

</TextBlock.Foreground>

</TextBlock>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

47

Gliederung

1. Einleitung

2. XAML

3. Grafik

4. Databinding

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

48

Databinding

Woher kommt der Text in einer TextBox oder die Einträge in einer Liste?

Umgekehrt: Wie kommen aktualisierte Werte aus einemTextfeld zurück in Stammdaten?

Bisher: Mühsame gleichbleibende Handarbeit

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

49

Databinding

WPF bietet ein neues Modell an, um UI mit demDatenbestand abzugleichen: Databinding.

In System.Windows.Data gibt es den entscheidendenTyp Binding, der Properties synchronisieren kann.

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

50

Databinding

Beispiel: Beschriftung eines Butttons soll von Textfeldkommen.

Eine mögliche Schreibweise über Attribut:

<StackPanel>

<Button Content="{Binding ElementName=tb, Path=Text}{Binding ElementName=tb, Path=Text}{Binding ElementName=tb, Path=Text}{Binding ElementName=tb, Path=Text}"/>

<TextBlock Name="tb">Ein Test</TextBlock>

</StackPanel>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

51

Databinding

Beispiel: Beschriftung eines Butttons soll von Textfeldkommen.

Andere mögliche Schreibweise über Kindelement:

<StackPanel>

<Button>

<Binding Binding Binding Binding ElementName="tb" Path="Text" />

</Button>

<TextBlock Name="tb">Ein Test</TextBlock>

</StackPanel>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

52

Databinding

Modus der Aktualisierung ist über Mode einstellbar:

• Default (vordefiniert, bei TextBoxen TwoWay)

• OneTime (einmal von Quelle zu Ziel)

• OneWay (immer von Quelle zu Ziel)

• OneWayToSource (immer von Ziel zu Quelle)

• TwoWay (immer in beide Richtungen)

<Binding ... ModeModeModeMode="OneWayToSource"/>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

53

Databinding

Das Ziel wird immer sofort aktualisiert, die Quelle nichtunbedingt. Einstellbar durch UpdateSourceTrigger mitden Werten:

• Default (bei TextBox LostFocus)

• Explicit (Methode UpdateSource() aufrufen)

• LostFocus

• PropertyChanged

<Binding ... UpdateSourceTriggerUpdateSourceTriggerUpdateSourceTriggerUpdateSourceTrigger="LostFocus"/>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

54

Databinding

Mögliche Quellen für ein Binding:

• XAML-Element (schon betrachtet)

• Objekte aus C#

• Collections

• XML-Daten

• ADO-Datenquellen

<Binding ... UpdateSourceTrigger="LostFocus"/>

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

55

Databinding

Als Beispiel werden normale Objekte betrachtet (andereFälle ähnlich).

Klassen müssen für das Binding erfüllen:

• öffentliche Properties (Felder gehen nicht)

• Defaultkonstruktor

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

56

Databinding

• Interface INotifyPropertyChanged ausSystem.ComponentModel

// in Datenklasse

public String Name {

get { return name; }

set { name = value; OnPropertyChanged("Name") ;}

}

public void OnPropertyChanged(string prop) {

if (PropertyChanged != null)

PropertyChanged(this, new PropertyChangedEventArgs(prop));

}

public event PropertyChangedEventHandler PropertyChanged;

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

57

Databinding

XAML kann im Window auch C#-Namesräumedeklarieren:

<WindowWindowWindowWindow x:Class="DataBinding.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:clrxmlns:clrxmlns:clrxmlns:clr="clr-namespace:System;assembly=mscorlib"

xmlns:srcxmlns:srcxmlns:srcxmlns:src="clr-namespace:DataBinding"

Title="Window1" Height="300" Width="300">

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

58

Databinding

Ein Datenobjekt kann von XAML als benannteRessource erzeugt werden.

<Window x:Class="DataBinding.Window1" ... >

<Window.Resources>

<src:Produkt x:Key="p1" Name="Persil"src:Produkt x:Key="p1" Name="Persil"src:Produkt x:Key="p1" Name="Persil"src:Produkt x:Key="p1" Name="Persil" />

</Window.Resources>

...

<Binding Source="{StaticResource p1}{StaticResource p1}{StaticResource p1}{StaticResource p1}" Path="Name" />

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

59

Databinding

Eine benannte Ressource kann auch alsObjectDataProvider erzeugt werden:

<Window x:Class="DataBinding.Window1" ... >

<Window.Resources>

<ObjectDataProvider x:Key="p2" />

</Window.Resources> ...

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

60

Databinding

Im Code kann man nach der Ressource suchen und einObjekt zuweisen:

// z.B. beim Laden

Produkt produkt = ...;

ObjectDataProvider providerObjectDataProvider providerObjectDataProvider providerObjectDataProvider provider = (ObjectDataProvider) FindResource("p2");

provider.ObjectInstance provider.ObjectInstance provider.ObjectInstance provider.ObjectInstance = produkt;

C# f

C# f

C# f

C# f üü üü

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

r Quereinsteiger

© eden market GmbH � Max-Brod-Weg 14 � D - 70437 Stuttgart

Fon: +49 (0) 711 990 16 -50 � Fax: -99 � www.edenmarket.de

61

Übung 10, Aufgabe 2