windows presentation foundation. agenda introduction developing applications wpf and wf...

54
Windows Presentation Foundation

Upload: cleopatra-sanders

Post on 12-Jan-2016

224 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Windows Presentation Foundation

Page 2: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Agenda

• Introduction• Developing Applications• WPF and WF interoperability• Custom Controls• Styles and Templates• Data Binding• Graphics• Not covered sections• Resume

Page 3: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Introduction

Page 4: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Progress

• WinAPI• MFC• Windows Forms• WPF

Page 5: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

WPF Components

Page 6: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Main features

• New GUI core• Declarative programming using XAML• Layout system• Styles• Control Templates• Data Templates• Flexible Data Binding• Graphics and Multimedia support• Improved security model• Unified document format (XML Paper Specification)• Compatibility with Windows Forms

Page 7: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Developing Applications

Page 8: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Developer Environment

• Visual Studio 2005• .NET 3.0• Visual Studio Extensions• Windows SDK

Page 9: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Application types

• XAML browser applications• Stand-alone applications

– Windows Applications– Hosted in WPF Navigation Window

Page 10: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

XAML browser application

• WPF Everywhere for XAML + browser plug-in• Installed using ClickOnce• Run in browser• Internet Zone security

Page 11: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Stand-alone application

• User permissions• Like a standard Windows Application

Page 12: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Creating stand-alone application

• Create WPF project– Windows Application (WPF)– Custom Control Library (WPF)

• Create class– User Control (WPF)– Custom Control (WPF)– Window (WPF)

• Create styles and templates– Resource dictionary– Local resource

Page 13: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Kinds of WPF Project objects

• User control– CS code-behind file– XAML declaration

• Custom control– CS implementation– Style in XAML resource dictionary

• XAML Resource– Style or Data Template or Control Template in XAML resource

dictionary

Page 14: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

WPF Application Project structure

• Application class (User control)– Based on System.Windows.Application– Build action – ApplicationDefinition– StartupUri property in XAML – Window class

• Window class (User control)– Based on System.Windows.Window

• User Control class (User control)– Based on System.Windows.Controls.UserControl

• Custom Control class (Custom control)– Based on System.Windows.Controls.Control– Overrides metadata in static constructor

• Resource Dictionary (XAML Resource)– Top file tag ResourceDictionary – Main file “themes\generic.xaml”

Page 15: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

WPF Application Project screen shot

Page 16: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

WPF and WF interoperability

Page 17: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

WPF and WF interoperability Agenda

• Hosting a Windows Form Control in WPF• Hosting a WPF Control in Windows Forms• Troubleshooting Hybrid Applications

Page 18: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Hosting a WF Control in WPF

1. Create Windows Application (WPF) project

2. Add reference to the WindowsFormsIntegration assembly

3. Add reference to the System.Windows.Forms assembly

4. Create System.Windows.Forms.Integration. WindowsFormsHost host object

5. Set WF control to Child property of host object

6. Add host object onto WPF panel (for example, Window)

Page 19: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Hosting a WF Control in WPF - sample

// Creating Windows Form control

MaskedTextBox mtbDate = new MaskedTextBox("00/00/0000");

// Creating Integration host

WindowsFormsHost host = new WindowsFormsHost();

host.Child = mtbDate;

// Appending host to Window

this.AddChild(host);

Page 20: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Hosting a WPF Control in WF

1. Create Windows Application (WinForms) project

2. Add references to WindowsFormsIntegration, PresentationCore, PresentationFramework and WindowsBase assemblies

3. Add into project file the following line :

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Just after

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

5. Create System.Windows.Forms.Integration.ElementHost host object

6. Add WPF control to host object

7. Add host object on WF Form

Page 21: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Hosting a WPF Control in WF

// Create WPF Control

TextBlock textBlock = new TextBlock();

textBlock.Text = "WPF TextBlock control";

// Create host

ElementHost host = new ElementHost();

host.Child = textBlock;

host.Dock = DockStyle.Fill;

// Add host to Form

this.Controls.Add(host);

Page 22: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Troubleshooting Hybrid Applications

• Overlapping Controls • Child Property• Scaling• Adapter• Nesting• Focus• Property Mapping• Layout-related Properties on Hosted Content• Navigation Applications• Opacity and Layering• Dispose• Enabling Visual Styles• Licensed Controls

Page 23: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Custom Controls

Page 24: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Models for Control Authoring

• Restyle existed controls• Derive from UserControl• Derive from Control• Derive from FrameworkElement

Page 25: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Restyle existed controls

• Simplest way• No additional properties• Custom control logic only in XAML

Page 26: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Restyle existed controls – example

<Window x:Class="RestyleControls.Window">

<Window.Resources>

<Style TargetType="{x:Type TextBox}">

<Setter Property="Background" Value="Red"/>

<Setter Property="FontWeight" Value="Bold" />

<Setter Property="FontStyle" Value="Italic" />

<Setter Property="Foreground" Value="Blue" />

</Style>

</Window.Resources>

<StackPanel>

<TextBox Text="Restyled TextBox"/>

</StackPanel>

</Window>

Page 27: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Restyle existed controls – screen shot

Page 28: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Derive from UserControl

• Built like Application• Composite of existed controls• No complex customization

Page 29: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Deriving from UserControl - example

<UserControl x:Name="parent“ x:Class="UserControls.UserControl">

<StackPanel Orientation="Horizontal"> <TextBlock

Text="{Binding ElementName=parent,Path=LabelText}" Margin="5"/>

<TextBoxText="{Binding

ElementName=parent,Path=ValueText}" Margin="5"/>

</StackPanel></UserControl>

Page 30: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Deriving from UserControl – example

<Windowx:Class="UserControls.Window"xmlns:l="clr-namespace:UserControls">

<StackPanel> <l:UserControl

LabelText="Label Text“ValueText="Value Text"/>

</StackPanel></Window>

Page 31: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Deriving from UserControl – screen shot

Page 32: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Deriving from Control

• Flexible way• Like most WPF controls• Support Control Templates• Support Themes

Page 33: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Deriving from Control - example

<Style TargetType="{x:Type local:EditControl}" > <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:EditControl}"> <Grid Name="TextBoxGrid"> <Border Name="Border" Padding="2" BorderThickness="0" > <TextBox Name="ContentTextBox" Text="Text!" OverridesDefaultStyle="True"> <TextBox.Template> <ControlTemplate TargetType="{x:Type TextBox}"> <ScrollViewer Margin="6,0,6,0" x:Name="PART_ContentHost" VerticalAlignment="Center" /> </ControlTemplate> </TextBox.Template> </TextBox> </Border> <TextBlock Name="MandText" Margin="0,0,6,0" HorizontalAlignment="Right" VerticalAlignment="Center" Visibility="Hidden" Text="*"/> <Ellipse Stroke="Blue"/>

<Grid Name="FocusBrackets" Visibility="Hidden" > <Line StrokeThickness="1" Stroke="Red" X1="1" Y1="1" X2="1" Y2=“…"/> <Line StrokeThickness="1" Stroke="Red" X1="1" Y1="1" X2="10" Y2="1"/> </Grid> </Grid> <ControlTemplate.Triggers> <Trigger Property="Mandatory" Value="True"> <Setter TargetName="MandText" Property="Visibility" Value="Visible"/> </Trigger> <Trigger SourceName="ContentTextBox" Property="IsFocused" Value="True"> <Setter TargetName="FocusBrackets" Property="Visibility" Value="Visible"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>

Page 34: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Deriving from FrameworkElement

• Own Render way• Appearance is defined by own render logic

Page 35: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Styles and Templates

Page 36: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Styling and Templating

• Resources• Style structure• Data Templates• Control Templates• Triggers

Page 37: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Styling and Templating - Resources

• Store local Styles, Data Templates and Control Templates

• Apply to FrameworkElement and FrameworkContentElement

• Share resources via Resource Dictionaries• Static and Dynamic resources

Page 38: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Resources example

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:ControlLibrary">

<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Shared.xaml"/> </ResourceDictionary.MergedDictionaries>

<Style TargetType="{x:Type local:EditControl}" > <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:EditControl}"> <Grid Name="TextBoxGrid"> <TextBox Name="ContentTextBox" Text="Text!" OverridesDefaultStyle="True“/> </Grid> <ControlTemplate.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition SourceName="ContentTextBox" Property="Text" Value=""/> <Condition Property="Mandatory" Value="True"/> </MultiTrigger.Conditions> <Setter TargetName="MandText" Property="Visibility" Value="Visible"/> </MultiTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style></ResourceDictionary>

Page 39: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Styling and Templating – Style structure

• Naming and Referencing • Deriving Styles• Setters• Data Template• Control Template• Triggers

Page 40: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Styling and Templating – Data Templates

• Name and Data Type• Visual data content• Content Control and Content Presenter• Triggers

Page 41: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Styling and Templating – Control Templates

• Name and Target Type• Visual data content• Template Attributes• Triggers

Page 42: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Styling and Templating – Triggers

• Trigger and Multi Trigger<Trigger Property="IsMouseOver" Value="true"> <Setter Property = "Background" Value="Red"/></Trigger>

• Data Trigger and Multi Data Trigger<DataTrigger Binding="{Binding Path=State}" Value="WA"> <Setter Property="Foreground" Value="Red" /></DataTrigger>

• Event Trigger and Multi Event Trigger<EventTrigger RoutedEvent="MouseLeave"> <BeginStoryboard> <Storyboard> <DoubleAnimation Duration="0:0:1.5" AccelerationRatio="0.10“ DecelerationRatio="0.25"

Storyboard.TargetProperty="(Canvas.Width)" /> </Storyboard> </BeginStoryboard></EventTrigger>

Page 43: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Data Binding

Page 44: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Binding a dependency property to a CLR property

<TextBox ...><TextBox.Text>

<Binding Path="Age" /></TextBox.Text>

</TextBox>

<TextBox TextContent="{Binding Path=Age}" />

<TextBox TextContent="{Binding Age}" />

• Path == DaraSource• Binding only to dependency properties

Page 45: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Data Context

1. The binding looks for a non-null DataContext on the TextBox itself

2. The binding looks for a non-null DataContext on the Grid

3. The binding looks for a non-null DataContext on the Window

Page 46: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Master-Detail Binding

public class Families : ObservableCollection<Family> { }

public class Family

{

string familyName;

public string FamilyName

{

get { return familyName; }

set { familyName = value; }

}

People members;

public People Members

{

get { return members; }

set { members = value; }

}

}

public class People : ObservableCollection<Person> { }

public class Person{ string name; public string Name { get { return name; } set { name = value; } }

int age; public int Age { get { return age; } set { age = value; } }}

Page 47: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Master-Detail Binding

<!-- Window1.xaml -->

<?Mapping

XmlNamespace="local" ClrNamespace="MasterDetailBinding" ?>

<Window ... xmlns:local="local">

<Window.Resources>

<local:Families x:Key="Families">

<local:Family FamilyName="Stooge">

<local:Family.Members>

<local:People>

<local:Person Name="Larry" Age="21" />

<local:Person Name="Moe" Age="22" />

<local:Person Name="Curly" Age="23" />

</local:People>

</local:Family.Members>

</local:Family>

<local:Family FamilyName="Addams">

<local:Family.Members>

<local:People>

<local:Person Name="Gomez" Age="135" />

<local:Person Name="Morticia" Age="121" />

<local:Person Name="Fester" Age="137" />

</local:People>

</local:Family.Members>

</local:Family>

</local:Families>

</Window.Resources>

...

</Window>

Page 48: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Master-Detail Binding

<!-- Window1.xaml -->

<?Mapping ... ?>

<Window ...>

<Window.Resources>

<local:Families x:Key="Families">...</local:Families>

</Window.Resources>

<Grid DataContext="{StaticResource Families}">

...

<!-- Families Column -->

<TextBlock Grid.Row="0" Grid.Column="0">Families:</TextBlock>

<ListBox Grid.Row="1" Grid.Column="0"

IsSynchronizedWithCurrentItem="True"

ItemsSource="{Binding}">

<ListBox.ItemTemplate>

<DataTemplate>

<TextBlock TextContent="{Binding Path=FamilyName}" />

</DataTemplate>

</ListBox.ItemTemplate>

</ListBox>

</Window>

Page 49: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Graphics

Page 50: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Not covered sections

Page 51: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Sections

• Security model• Web Browser Applications• Using multimedia and graphics• Easy to restyle application

Page 52: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Resume

Page 53: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Advantages

• WPF has very flexible model• XAML is a great advance in declarative programming• Easy to use multimedia and graphics• Easy to restyle application

Page 54: Windows Presentation Foundation. Agenda Introduction Developing Applications WPF and WF interoperability Custom Controls Styles and Templates Data Binding

Disadvantages

• WPF functionality is not so high as WF one• WPF and WF interoperability is buggy• VS support of XAML is buggy and not full• Most available WPF documentation is out of date