advanced programming c# lecture 3 [email protected]/data/csharp/2018/wyklad3... ·...

22
Advanced Programming Advanced Programming C# C# Lecture 3 dr inż. Małgorzata Janik [email protected] Winter Semester 2018/2019

Upload: others

Post on 24-Jun-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

Advanced ProgrammingAdvanced ProgrammingC#C#

Lecture 3

dr inż. Małgorzata Janik

[email protected]

Winter Semester 2018/2019

Page 2: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

Windows Presentation Windows Presentation FoundationFoundation

Page 3: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

3 / 23C# Lecture 3 Małgorzata Janik

Windows Presentation Foundation● Allows for clear

separation between Design and Functionality

● Better GUI

Page 4: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

4 / 23C# Lecture 3 Małgorzata Janik

WPF vs Windows Forms

http://www.slideshare.net/nagaharish_movva/windows-presentation-foundation-4377923

Page 5: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

5 / 23C# Lecture 3 Małgorzata Janik

Unified presentation

http://www.slideshare.net/nagaharish_movva/windows-presentation-foundation-4377923

Page 6: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

6 / 23C# Lecture 3 Małgorzata Janik

Working with WPF ● User interface is designed in XAML● Underlying functionality is build using C#

Page 7: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

7 / 23C# Lecture 3 Małgorzata Janik

New Project: WPF Application● File → New → Project... → WPF Application

Page 8: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

8 / 23C# Lecture 3 Małgorzata Janik

Today(1) WPF tutorial

(2) Advanced controls

(3) Ducks-shooting game

Page 9: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

9 / 23C# Lecture 3 Małgorzata Janik

WPF

XAML

Designer

MainWindow.xaml → Design (XAML)MainWindow.xaml.cs → Functionality (C#)

Page 10: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

10 / 23C# Lecture 3 Małgorzata Janik

WPF Tutorial - Controls

<Button />

<Button><StackPanel><Image /><Label /></StackPanel></Button>

Label

TextBoxRadioButton Try both:- Using Toolbox- Creating Control by hand

in XAML

Page 11: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

11 / 23C# Lecture 3 Małgorzata Janik

WPF Tutorial - Properties

<Button Content = ”Show text” />

[Image]Source=”...”

[Label] Content = ”New label!”FontSize=”30”

[RadioButton] Try both:- Using Properties window- Adding Property by hand

in XAML

Foreground=”Blue”

Page 12: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

12 / 23C# Lecture 3 Małgorzata Janik

WPF Tutorial - LayoutsGridLayout: 3 rows, 3 columns

StackPanel:Vertical

StackPanel:Horizontal

Page 13: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

13 / 23C# Lecture 3 Małgorzata Janik

WPF: Grid LayoutEverything between:

<grid>

</grid>

is in grid layout. By default there is 1 row and 1 column.

To create 2 rows and 3 columns we would need to add in the beginning following code:

<Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions>

3 columns

2 rows

To put a control into certain column & row do:

<Button x:Name="button" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Content="Show text" />

Page 14: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

14 / 23C# Lecture 3 Małgorzata Janik

WPF: Stack LayoutEverything between:

<StackPanel>

</StackPanel>is in stack layout. Basic property of the StackPanel is Orientation, which can be Horizontal or Vertical.

<StackPanel Orientation="Horizontal" Height="52"> <Image x:Name="image1" HorizontalAlignment="Left" Height="60"

VerticalAlignment="Top" Width="50" Source="Resources/eye.png" Stretch="Fill"/> <Label VerticalAlignment="Center">Show</Label></StackPanel>

Page 15: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

15 / 23C# Lecture 3 Małgorzata Janik

Adding image● Similarly as before, add to the project using

Resources.resx● After adding an image, do:

→ Right click the image file in the Solution Explorer

→ Click Properties

→ Select Build Action to Resource

→ Clean and Build (from menu)

(→ Afterwards add an image / reload the image in the Properties window again → Source property → click arrow → choose again from the list)

Page 16: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

16 / 23C# Lecture 3 Małgorzata Janik

Events● When event is added, we move to the c# in the

MainWindow.xaml.cs file

● Commands that may be useful:

Try both:- Using Properties window- Creating Event by hand

in XAML

labelShowText.Visibility = Visibility.Visible;labelCopyText.Foreground = Brushes.Red;labelCopyText.Content = textBox.Text;

Page 17: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

17 / 23C# Lecture 3 Małgorzata Janik

Designing New Control● Glass Button

● Project → Add → Resource

Dictionary...● Resource Dictionary

Glass effect of transparency

Copy file:

<Button Style="{DynamicResource GlassButton}" Margin="0,0,24,22" x:Name="buttonGlass1" Height="82"VerticalAlignment="Bottom" HorizontalAlignment="Right" Grid.Row="2" Grid.Column="2" Width="132" Click="buttonGlass1_Click">Button</Button>

Add control:

http://www.if.pw.edu.pl/~majanik/data/Csharp/Files/GlassButton.xaml

To use our GlassButton style, we must now add a resource reference into App.xaml file: <ResourceDictionary Source=”GlassButton.xaml”/>

More info: http://www.jadeskaggs.com/2009/05/04/creating-custom-glass-buttons-with-xaml-in-wpf/

Page 18: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

18 / 23C# Lecture 3 Małgorzata Janik

Shooting ducks

DUCKSImage control(moved by the Timer)

TARGETImage control(moved with mouse)

COUNTERLabel control(changes when duck is shot or dissaper)

2/2

Page 19: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

19 / 23C# Lecture 3 Małgorzata Janik

Useful tools● Moving objects:

duck.Margin = new Thickness(duck1.Margin.Left + 2, duck1.Margin.Top, 0, 0);

● Get Mouse Position:var point = e.GetPosition(imageBackground);

● TimerSystem.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();

dispatcherTimer.Tick += dispatcherTimer_Tick; //event!!

dispatcherTimer.Interval = new TimeSpan(20, 0, 0);

dispatcherTimer.Interval = TimeSpan.FromMilliseconds(1);

dispatcherTimer.Start();

Page 20: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

20 / 23C# Lecture 3 Małgorzata Janik

Useful tools● Flip image: duck.RenderTransformOrigin = new Point(0.5, 0.5);

ScaleTransform flipTrans = new ScaleTransform();

flipTrans.ScaleX = -1; // or 1

//flipTrns.ScaleY = -1;

duck.RenderTransform = flipTrans;

Page 21: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

21 / 23C# Lecture 3 Małgorzata Janik

Resources that can be used● Eye:

● Glass button:

● Ducks:

http://www.if.pw.edu.pl/~majanik/data/Csharp/Files/duck.pnghttp://www.if.pw.edu.pl/~majanik/data/Csharp/Files/Aero_Grass.jpghttp://www.if.pw.edu.pl/~majanik/data/Csharp/Files/target.png

http://www.if.pw.edu.pl/~majanik/data/Csharp/Files/GlassButton.xaml

http://www.if.pw.edu.pl/~majanik/data/Csharp/Files/eye.png

Page 22: Advanced Programming C# Lecture 3 malgorzata.janik@pw.edumajanik/data/Csharp/2018/Wyklad3... · Advanced Programming C# Lecture 3 dr inż. Małgorzata Janik malgorzata.janik@pw.edu.pl

THE END

dr inż. Małgorzata Janik

[email protected]