1 Introduction to WPFUCN / 2012 Introduction to WPF Introduction to WPF Based on a Microsoft...
-
Upload
edgar-mclaughlin -
Category
Documents
-
view
228 -
download
1
Transcript of 1 Introduction to WPFUCN / 2012 Introduction to WPF Introduction to WPF Based on a Microsoft...
1 Introduction to WPF UCN / 2012
Introduction to WPFIntroduction to WPF
•Based on a Microsoft presentation
3 Introduction to WPF UCN / 2012
Topics
• Windows Presentation Foundation– Overview– 2D
– Controls and Layout
– Styles, Templates & Resources
– Data Binding
– Animation
5 Introduction to WPF UCN / 2012
Now
• GDI (20 years), GDI+, WinForms• DirectX (11 years), Direct3D• Quartz, DirectShow (8 years)
• Problems– Showing their age– Each API is different– Mixing APIs is challenging
6 Introduction to WPF UCN / 2012
Next Gen
• WPF – replaces GDI• Direct3D – large games, used by WPF• Media Foundation – ultimately will replace DirectShow
• MCML –markup language for Media Center Edition applications
• XNA – small games
7 Introduction to WPF UCN / 2012
WPF
• Compositing– UI, Documents, Media, 3D, Browser, …
• Declarative programming with XAML markup
• For Designers and Developers• Rewritten from scratch
– Built on top of Direct3D– Hardware accelerated– Vector based– Resolution independent– Retained graphics
8 Introduction to WPF UCN / 2012
WPF Vision
• Integrated, vector-based composition engine
– Utilizing the power of the PC throughout the graphics stack
• Unified approach to UI, Documents, and Media
– Integration as part of development and experience
• Declarative programming– Bringing designers directly into
application development
• Ease of deployment– Allowing administrators to deploy and
manage applications securely
10 Introduction to WPF UCN / 2012
XAML
• XML for Applications Markup Language
<Button Name="button1">Click Me!
</Button>
Button button1 = new Button();button1.Content = "Click Me!";
11 Introduction to WPF UCN / 2012
Properties as Attributes or Elements
<Button Content="Click Me!" Background="LightGreen" />
<Button> <Button.Background> LightGreen </Button.Background> Click Me!</Button>
12 Introduction to WPF UCN / 2012
Attached Properties
<Canvas> <Button Canvas.Top="30" Canvas.Left="40"> Click Me! </Button></Canvas>
14 Introduction to WPF UCN / 2012
Shapes
• Elements of UI tree– Just like controls and other elements
Rectangle
Ellipse
Polyline
Polygon
Path
15 Introduction to WPF UCN / 2012
Shapes Example
<Canvas Width="100" Height="100"> <Ellipse Fill="Yellow" Stroke="Black" StrokeThickness="7" Width="100" Height="100" />
<Ellipse Fill="Black" Width="10" Height="15" Canvas.Left="28" Canvas.Top="28" />
<Ellipse Fill="Black" Width="10" Height="15" Canvas.Left="62" Canvas.Top="28" />
<Path Stroke="Black" StrokeThickness="6" Data="M 30,60 Q 50,90 70,60" /></Canvas>
16 Introduction to WPF UCN / 2012
Shapes and Code
• Shapes accessible from code behind– Just like any element
• Change appearance by setting properties– Screen is automatically updated
<Ellipse Fill="Yellow" x:Name="myEllipse"
StrokeThickness="7" Stroke="Black" Width="100" Height="100" />
// ...in code behind
myEllipse.Width = 200;
17 Introduction to WPF UCN / 2012
Transforms
• Any element can be transformed– Scaling, rotation, shearing
• Optionally affects layout
18 Introduction to WPF UCN / 2012
Hit Testing
• Built in for all drawing elements
• Takes transformations into account
• Bubbling event model
19 Introduction to WPF UCN / 2012
Brushes
• Specifies how shape is filled– Used for properties throughout WPF
• Polymorphic• Composable
<Rectangle Fill="Red" Width="200" Height="100" />
20 Introduction to WPF UCN / 2012
Linear/RadialGradientBrush
• Fills across a range of colors• Enables interesting visual effects
21 Introduction to WPF UCN / 2012
ImageBrush
<TextBlock FontSize="72" FontFamily="Arial Black"> <TextBlock.Foreground>
<ImageBrush ImageSource="c:\Windows\Blue Lace 16.bmp" />
</TextBlock.Foreground> Hello, World!</TextBlock>
23 Introduction to WPF UCN / 2012
Composability: VisualBrush
• Fill with any UI element• Makes certain design tricks easy
– Reflection of UI– Use as 3D surface texture
25 Introduction to WPF UCN / 2012
Imaging and Video
• Elements– Image– MediaElement
• Integrate images and video into a brush– Paint shapes– Use as a 3D surface texture
• Extensive image handling support– System.Windows.Media.Imaging
26 Introduction to WPF UCN / 2012
Future Proofing the Platform and Your Applications
• Resolution independent graphics
• Double precision floating point coordinates and transformations
• Hardware capabilities are abstracted to better map to future hardware advances
27 Introduction to WPF UCN / 2012
Summary
• Modern integrated content platform
• Consistency across UI and development
• Higher quality through hardware advances
30 Introduction to WPF UCN / 2012
Layout Controls
• StackPanel• WrapPanel• Canvas• DockPanel• Grid• ...
31 Introduction to WPF UCN / 2012
Simple Controls
• PasswordBox• ScrollBar• ProgressBar• Slider• TextBox• RichTextBox• ...
32 Introduction to WPF UCN / 2012
Content Controls
• Button• RepeatButton• ToggleButton• CheckBox• RadioButton• Label• Frame• ListBoxItem• StatusBarItem• ScollBarViewer
• ToolTip• UserControl• Window• NavigationWindow• ...
34 Introduction to WPF UCN / 2012
Items Controls
• Menu• ContextMenu• StatusBar• TreeView• ListBox• ComboBox• TabControl• ...
38 Introduction to WPF UCN / 2012
Skele
ton
Prototype
&
Experiment
Feedback from Customers
Fin
al
Pro
du
ct
Design
Development Process
Styling & Styling & TemplatesTemplates
40 Introduction to WPF UCN / 2012
Setting Setting PropertiesProperties
Trigger Trigger
AnimationsAnimations
TemplateTemplate
StylesStyles
41 Introduction to WPF UCN / 2012
Lookless Controls and Templates
• Control implies behaviour
• Probably supplies default look– Designer free to supply new look
43 Introduction to WPF UCN / 2012
Styling and Resources
• Style rarely defined inline– Tend to be reused for consistency
• Usually defined as resources
44 Introduction to WPF UCN / 2012
Resource Dictionaries
• Simple Key, Value collection• FrameworkElement.Resources
<Grid> <Grid.Resources> <Style x:Key="dapper"> <Setter Property="Background" Value="LimeGreen" /> </Style> </Grid.Resources>
...
<Button Style="{StaticResource dapper}">Click</Button>
45 Introduction to WPF UCN / 2012
Resource Hierarchy
System Resources
Application Resources
ElementResources
ElementResources
ElementResources
Window/PageResources
Window/PageResources
ElementResources
Application Resources
<Window> <Window.Resources> ... </Window.Resources>
<Grid> <Grid.Resources> ... </Grid.Resources>
<ListBox> <ListBox.Resources> ... </ListBox.Resources> </ListBox> </Grid></Window>
47 Introduction to WPF UCN / 2012
Agenda
• Element data binding
• Object and XML data binding
• Data templates
• Master / child relationships
• Debugging
48 Introduction to WPF UCN / 2012
Data Binding Overview
• Target– Any property, any element
• Source– CLR Object– WPF Element– ADO.NET– XML
• Dynamic– INotifyPropertyChanged, DependencyProperty or
PropertyDescriptor• Multiple models
– One Time– One Way– Two Way
• Value Converter
• Target– Any property, any element
• Source– CLR Object– WPF Element– ADO.NET– XML
• Dynamic– INotifyPropertyChanged, DependencyProperty or
PropertyDescriptor• Multiple models
– One Time– One Way– Two Way
• Value Converter
Control
“Data Item” Property
Binding
Pro
perty
49 Introduction to WPF UCN / 2012
Binding in Markup
<Image Source="truck.png"Canvas.Left= "{Binding Path=Value, ElementID=horzPos}"/>
<Slider Orientation= "Horizontal" Name="horzPos" Value="40"/>
{Binding Path=Value, ElementName=horzPos}
50 Introduction to WPF UCN / 2012
Object Data Providers
• Add to resource dictionary– Named source objects
• Use with resource binding– {StaticResource theCars}
<Window> <Window.Resources> <ObjectDataProvider x:Key="myData" ObjectType=" {x:Type Foo}" /> </Window.Resources>
...
<TextBlock TextContent="{Binding Path=Bar, Source={StaticResource myData} }" />
51 Introduction to WPF UCN / 2012
Share Common Source
StackPanel
Image
HorizontalSlider
Value= {Binding Path=XPos, Source={StaticResource myData}}
Canvas.Left= {Binding Path=XPos, Source={StaticResource myData}}
DataContext= {Binding Source={StaticResource myData}}
Value= {Binding Path=XPos}
Canvas.Left= {Binding Path=XPos}
52 Introduction to WPF UCN / 2012
Provide Data From Code
• May be easier to load data in codebehind• Can set DataContext in code
Foo myDataObject = new Foo();myDataObject.Bar = 42;
// Set DataContextmyWindow.DataContext = myDataObject;
53 Introduction to WPF UCN / 2012
Binding to XML
<Cars> <Car Make="Ford" Model="F-150"> <Image>truck.png</Image> </Car> <Car> ... </Car></Cars>
cars.xml
<XmlDataProvider x:Key="cars" XPath="/Cars/Car" Source="cars.xml" />
<TextBlock TextContent="{Binding XPath=@Make, Source={StaticResource cars}}"/>
54 Introduction to WPF UCN / 2012
Provide XML From Code
• Can load XML data in codebehind– Just like any other data
XmlDocument doc = new XmlDocument();doc.LoadXml("<Foo><Bar>Hello, world</Bar></Foo>");
myGrid.DataContext = doc;
55 Introduction to WPF UCN / 2012
Databases and Web Services
• No special support required
• Use object binding– DataSet/DataTable support the TypeDescriptor system
56 Introduction to WPF UCN / 2012
Data and Controls
• ContentControl – singular content– Button, CheckBox, Label, ListBoxItem, …
• ItemsControl – plural content– ListBox, ComboBox, Menu, TabControl, ToolBar, …
• Can use data objects as content
myListBox.Items.Add(new Car());
myButton.Content = new Car();
Car c = (Car) myListBox.SelectedItem;
57 Introduction to WPF UCN / 2012
Data Templates
DataTemplate
class Car{ string Image {get;set} string Model {get;set}}
<DataTemplate x:Key="carTemplate">
<Border BorderBrush="Blue" BorderThickness="2" Background="LightGray"
Margin="10" Padding="15,15,15,5">
<StackPanel>
<Image HorizontalAlignment="Center" Source="{Binding Path=Image}" />
<Border HorizontalAlignment="Center" BorderBrush="Navy"
Background="#DDF" BorderThickness="1" Margin="10" Padding="3">
<TextBlock FontSize="18" Text="{Binding Path=Model}" />
</Border>
</StackPanel>
</Border>
</DataTemplate>
58 Introduction to WPF UCN / 2012
Choosing a Data Template
• By Name (resource dictionary key)– ContentTemplate/ItemTemplate= {StaticResource myStyle}
• By Type– <DataTemplate DataType="{x:Type cc:Car}">– <DataTemplate DataType="Book"> for XML
59 Introduction to WPF UCN / 2012
Summary
• WPF understands your data– use your favorite data model: XML, objects, SQL, WS …– Bind data to controls
• Templates give your data a face
• Controls “think” data – Data is pervasive across and integrated into the platform
60 Introduction to WPF UCN / 2012
Links
• Sites– http://windowsclient.net/ – http://wpf.netfx3.com/ (moving to windowsclient)– WPF Windows SDK Documentation– My Five Day Course For Hitting the WPF Curve/Cliff – www.brains-N-brawn.com/backRow/– http://sessions.visitmix.com/ – http://wpf.netfx3.com/files/folders/labs/default.aspx
(The tutorials are from here)– http://devlicio.us/blogs/rob_eisenberg/default.aspx
(Søg efter ‘Crash Course’
61 Introduction to WPF UCN / 2012
Exercise
• Make tutorials of free choice from the tutorial folder or from the videos on http://windowsclient.net/
• The following are recommended:– Creating Rich 2D and 3D Content in WPF– ColorSwatch– Using Data Binding in WPF– LiveSearch (using a webservice and data binding)– The video tutorials!• You might also visit the video casts from the Mix
Conferences: http://sessions.visitmix.com/ • Challenge:– Make a rotating cube with a playing video on each side.– Might need some computing power to run :-(