Windows Presentation Foundation
Windows Presentation Foundation
References
Pro C# 2010 and the .Net 4 Platform, Andrew Troelsen, Apress, 2010 Pro WPF in C# 2008, 2nd Edition, Matthew MacDonald, Apress, 2008 Programming WPF, 2nd Edition, Sells & Griffiths, OReilly, 2007 Windows Presentation Foundation Unleashed, Adam Nathan, SAMS, 2007 Essential Windows Presentation Foundation, Chris Anderson, Addison-Wesley, 2007 http://msdn2.microsoft.com/en-us/library/aa970268.aspx http://msdn2.microsoft.com/en-us/library/ms754130.aspx http://www.beacosta.com/blog/?m=200704
2
WPF Blogs
List of Microsoft WPF Team bloggers Josh Smith Blog WPFpedia Mike Taulty's Blog
Introduction
What is WPF?
A Graphical User Interface Technology
Desktop Little brother Silverlight is used for web applications
Markup
XAML
eXtensible Application Markup Language Tags are names of .Net 3.5 classes Attributes are class properties and events <Grid> <Ellipse Fill=blue /> <TextBlock> Name: <TextBlock Text={Binding Name} /> </TextBlock> </Grid>
5
Code Behind
Often, code provides processing for control events, bound in XAML, like this:
XAML in Window.Xaml
<Button x:Name=button Width=200 Height=25 Click=button_Click>Submit</Button>
C# code in Window.Xaml.cs
Void button_Click(object sender, RoutedEventsArgs e) { MessageBox.Show() }
6
C# Wizard
10
Panels
Layouts, like the previous page can use:
Canvas
Simplest, placement relative to two edges
StackPanel
Horizontal or vertical stacking
Grid
Uses rows and columns
DockPanel
Dock to top, right, bottom, left, and all else fills remaining space
WrapPanel
Horizontal stacking with wrap on overflow
Vector Graphics
In WPF there is only (usually) one window
Controls are not windows! No handles really, no handles A button is a shape with border, fill, text, animation, and events, like click. There is a Button class, but it is not a .Net control in the traditional sense nor an ActiveX control.
Just markup, lines, fills, and events.
12
Parse Tree
XAML gets rendered into a parse tree, just like XML it is XML
Inherited properties are based on parent child relationships in the markup tree Events bubble based on those relationships as well You have direct and simple control over that structure
The world is yours!
13
15
3D Hit Testing
16
3D Perspective Camera
17
Famous Teapot
18
19
Routed Events
WPF maps markup elements to UIElements, which derive from ContentControl
That means that almost everything can hold content only one thing unless its a panel. How does a mouse click event on any one of a controls content elements get routed to the control?
By walking the XAML parse tree until it finds a parent that handles that event.
20
21
Attached Properties
Buttons, ListBoxes, Images, etc., do not have Dock properties. However, when you place one of these in a DockPanel, you find that it has had Dock properties attached.
<Image Source="./help.png" DockPanel.Dock="Top" Height="213" ImageFailed="Image_ImageFailed" />
22
DependencyObject Class
Attached properties work because all WPF controls derive from the DependencyObject class.
DependencyObject class supports adding an arbitrary number of dependency properties.
23
24
Dependency Properties
A Dependency Property is a property that is registered with the WPF Dependency property system. Two uses:
Backing an object property with a dependency property, provides support for databinding, styling, and animation. Examples include Background and Fontsize properties Creating attached properties. Attached properties are properties that can be set on ANY DependencyObject types. An example is the Dock property.
You can find an example of the definition and use of a custom Dependency Property here. Dependency Properties are a Publish and Subscribe system.
25
26
Property Syntax
Two syntax forms:
XAML attribute: <button ToolTip=Button Tip /> Property Element Syntax: <Button> <Button.Background> <SolidColorBrush Color=#FF4444FF /> </Button.Background> Some Button Text </Button>
27
Markup Extensions
Sometimes you need to assign a property from some source at run-time. For that you use Markup Extensions: <Button Foreground={x:static SystemColors.ActiveCaptionBrush} > Some text </Button>
28
Inline Styles
Collections of property values:
<Button.Style> <Style> <Setter Property=Button.FontSize Value=32pt /> <Setter Property=Button.FontWeight Value=Bold /> </Style> </Button.Style>
29
Named Styles
Collections of property values:
<Window.Resources> <Style x:Key=myStyle TargetType={x:Type Control}> <Setter Property=FontSize Value=32pt /> <Setter Property=FontWeight Value=Bold /> </Style> </Window>
30
Binding
Binding infrastructure allows you to set up a one-way or two-way updating of property values that happens when the source changes. This requires two things:
A dependency object
Has its own dispatcher thread
31
Binding
Objects that implement INotifyPropertyChanged interface raise events when the property has changed. Data binding is the process of registering two properties with the data binding engine and letting the engine keep them synchronized. You will find an example in the Wpf_AttachedProperties demo code.
32
Binding Links
MSDN Article by John Papa CodeProject article by Josh Smith (part of a tutorial series) Bea (Costa) Stollnitz
33
Control Templates
With Control Templates you can change the look and feel of existing controls and support making your own controls:
<Button.Template> <ControlTemplate> <Grid><Rectangle /></Grid> </ControlTemplate> </Button.Template>
34
Navigation
You can use instances of the Page and Frame classes to set up a navigation structure resembling web applications.
Pages go in NavigationWindow instances and Frames go in Windows and Pages. This is a good alternative to tabbed displays.
35
Special Classes
ContentControl
All UIElements derive from this. Content can be text, a tree of elements, or a .Net object which can be displayed using a data template
Dependency Object
Derives from Dispatcher Object Supports data binding, styling, animation, property inheritance, and property change notifications
WindowsFormsHost
Supports hosting controls based on HWNDs
36
Special UIElements
ViewBox
Resizes content to fit available space
UserControl
Way to build custom controls as collections of elements on a panel
Animatable
Provides hooks for DirectX to change elements properties over time, e.g., position, size, color,
FlowDocument
FlowDocumentScrollViewer FlowDocumentPageViewer
MediaElement
Play media on load or on request, e.g., wma, wmv, mp3,
37
End of Presentation
38