Windows Presentation Foundation Intro Foundation Intro
Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company
Objectives • Introduce Windows Presentation Foundation (WPF) • Investigate XAML and the XAML designer in Visual Studio 2010 • Learn about XAML controls, properties, and events • Work with container controls, dependency properties, and the Grid control Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Agenda • Introducing Windows Presentation Foundation (WPF) • Introducing XAML and the WPF Designer • Investigating XAML • Introducing Content and Grid Controls
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Do We Need Another UI Paradigm? • Applications created using Windows Forms don’t show off well • Applications require a new way to present information, rather than rectangular forms, charts, and graphics
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
What’s Wrong with What We Have? • Existing Windows graphics techniques make creating visually appealing applications difficult • Up until recently, graphics hardware not powerful enough, in general,
for more than Windows Forms
• Could create “movie-style” interfaces, but it’s difficult, and each requires its own set of tools • 3D graphics extremely difficult without external libraries • Standard Windows GDI and USER libraries extremely limited
• Windows Presentation Foundation provides a new medium • Takes advantage of hardware power • Provides consistent, powerful graphics platform
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
WPF to the Rescue • Integrated, vector-based composition engine • Utilizing the power of the PC
throughout the graphics stack • Resolution independence
• Unified approach to UI, documents, and media • Integration as part of development
experience
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
WPF to the Rescue • Declarative programming • Brings designers directly into application
development • Allows for separation of design and code
• Ease of deployment • Allowing administrators to deploy and manage
applications securely
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Graphics and Composition • Includes modern graphics capabilities • 2D and 3D graphics • Image effects and multiple codecs • Hardware-accelerated sub-pixel ClearType • Full video and audio support
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Important Questions, Part I • Does WPF allow me to do something I couldn’t do before? • No: It’s all about the amount of work you want to
put into achieving the results
• Should I use WPF instead of DirectX? • That depends—for “hard core” games, DirectX
perhaps a better choice • Can combine WPF and DirectX in the same application Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Important Questions, Part II • Should I drop Windows Forms and use WPF instead? • Debatable, for ordinary business applications • Visual Studio provides similar sets of controls for each • WPF makes it far easier to create rich media-centric applications • If you need Windows 98 support, Windows Forms are the only choice
• Should I use WPF instead of Adobe Flash? • For Web-based applications, Flash is currently standard for media • Silverlight provides small WPF runtime that supports XAML and
JavaScript
• Perfect for rich browser-based applications
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
WPF Reference Application • Family.Show
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Family.Show • Available for download at http://www.codeplex.com/familyshow • Includes full source code and documentation on its design • Includes family tree (truncated) for British royal family • Can easily create your own family tree • Provides rich visual representation, difficult to create without WPF • Investigate zooming and panning features • Different views of information
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
WPF vs. Silverlight • Microsoft provides two technologies for clientside applications: WPF and Silverlight • Both allow you to create client applications • Both use XAML to design the interface
• WPF has entire .NET Framework behind it • Silverlight works with a small subset of Framework
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
WPF vs. Silverlight • WPF: • Ships as part of .NET Framework (3.0 and later) • Runs as a Windows application • Or as Web Browser application (XBAP) • XBAPs run only in Internet Explorer with .NET 3.0 and IE and Firefox with .NET 3.5 and later • Runs only on Windows machines (starting with Windows
XP) • Provides richest functionality • Full support for 3D graphics
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
WPF vs. Silverlight • Silverlight: • Ships independently; isn’t part of .NET Framework • Can be hosted by Web browsers only • Internet Explorer, Firefox, Safari • Runs on Windows, Mac, Linux clients • Functionality is a subset of WPF’s feature set • Uses only small subset of .NET Framework
• Which do you use? • Depends on target audience, technological needs,
preferred deployment
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
An Inconvenient Truth (or Two) • Far more difficult to create a decent-looking application in XAML • Because the bar is so much lower in other environments • Developers creating applications in XAML generally create
ugly applications • Good XAML applications require graphic designers
• On the other hand… • Far easier to create great-looking application • Because Windows and Web forms are so limited
• Also check out Microsoft Expression Studio Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
WPF and XAML • WPF and XAML: The same thing? XAML is XML-based grammar • Declaratively defines WPF applications •
• Windows Forms is a set of classes •
WPF, too, is a set of classes
• For Windows Forms application •
Must write code to generate the interface
• For WPF •
Can either write code, or can write XAML
• XAML <-> WPF is not one-to-one mapping •
Some names in XAML don’t match the same member names in WPF classes
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Agenda • • • •
Introducing WPF Introducing XAML and the WPF Designer Investigating XAML Introducing Content and Grid Controls
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
WPF Project Templates • In Visual Studio 2010, several project templates for WPF: • WPF Application • WPF Browser Application • WPF Custom Control Library (allows you to use Windows Forms
controls) • WPF User Control Library (creates new WPF controls)
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Investigating Routed Events • RoutedEventArgs parameter in event handler gives it away • Something’s different about WPF events
• Events bubble up to container • Code can alter the perception of the source object
• Code can always determine the original source • And the original event
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Properties of RoutedEventArgs • • • •
Handled OriginalSource RoutedEvent Source
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Agenda • Introducing Windows Presentation Foundation (WPF) • Introducing XAML and the WPF Designer • Investigating XAML • Introducing Content and Grid Controls
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Investigating XAML • XAML is simple • But provides several different ways to set property
values
• • • •
Simple Properties/Type Converters Complex Properties Markup Extensions Attached Properties
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Investigating XAML • DEMO
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Simple Properties/Type Converters • Dragging Button control onto design surface creates several properties • Markup counts on Button class providing Content,
Height, HorizontalAlignment, Margin, Name, VerticalAlignment, and Width properties
• Some properties are simple strings • Content and Name properties
• Others are more complex Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Type Converters • Height and Width properties? • Properties are numeric • Markup supplies values as strings • Along the line, some code must convert • Works because Integer class provides built-in conversion
from string
• Other properties even more complex: • HorizontalAlignment and VerticalAlignment? • Need to convert from string (Bottom, Center, Stretch, or Top; Center, Left, Right, Stretch) to enumerated values Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Type Converters • Margin adds own set of issues • Can supply a single value (all four sides) • Can supply two values (left/right and top/bottom) • Can supply four values (left, top, right, bottom)
• Margin property is a Thickness structure • Contains four integers • Setting property calls constructor for Thickness structure • Requires converter to read the comma-delimited string
and convert to a call to the constructor
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Complex Properties • Type converters work well • Some properties can’t be represented by single value
• Want to specify background of a Grid control as a linear gradient? • Can’t represent the behavior with a single value
• Properties of elements that are themselves objects with properties require special care • Represent as nested elements • Named Parent.Property (Grid.Background)
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
DEMO • Complex properties
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Markup Extensions • Usually, standard XAML markup provides functionality you need • Sometimes not possible to set property value at design time • Some properties must be set dynamically, at runtime • Need to use markup extension • Allows you to set property in non-standard way
• Can specify markup extension as nested element, or as attribute • As attribute, always surrounded with { } • Indicating value supplied at runtime
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Markup Extensions • Declarative binding requires markup extension: Property= "{Binding ElementName=ObjectName, Path=PropertyName}"
• Can also express using child element: <Object.Property> <Binding ElementName="ObjectName", Path="PropertyName"/> </Object.Property> Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
DEMO • Markup extension/binding
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Attached Properties • Nest a control within a Grid • Specify its row and column with Grid.Row and
Grid.Column properties • Where did these come from? • Child control doesn't supply!
• Grid adds these to all its child controls • In other words, they're attached properties • Properties appear as properties of the class • But they're defined in a different class (Grid, in this case)
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Attached Properties • Specific syntax: • DefiningType.PropertyName • Grid.Row • Aren't actually properties • Converted to method calls by compiler • Defining class must provide GetPropertyName and
SetPropertyName methods
• Grid.GetRow and Grid.SetRow
• Technique hides what's really going on • Calling method in defining class? • Does Grid keep track of all its children's coordinates?
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Attached Properties • Of course, Grid doesn't keep track of all its children's coordinates • Child controls all inherit from DependencyObject • Defined to maintain an unlimited number of dependency
properties
• Parent (Grid) maintains a single instance of a field for each property • Grid.RowProperty for Grid.Row, for example • Child maintains its own value for that property
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Attached Properties • Calling parent control's GetPropertyName and SetPropertyName methods equivalent to calling GetValue and SetValue methods of child object • To retrieve Grid.Row property of TextBox named DemoTextBox, use expression like: DemoTextBox.GetValue(Grid.RowProperty)
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Agenda • • • •
Introducing WPF Introducing XAML and the WPF Designer Investigating XAML Introducing Content and Grid Controls
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Content and Grid Controls • Many controls inherit from ContentControl (including Button) and can contain other controls • Button with image and text? • No problem! • ListBox containing a bunch of TextBox controls? • No problem!
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Working with Layout Controls • Several controls useful for laying out other controls • DockPanel • Allocates an edge for each child control • Useful for defining rough layout
• StackPanel • Stacks children horizontally or vertically • Useful internal to other controls (Button, for example)
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Working with Layout Controls • Grid • Arranges children in a grid • No need for fixed sizes or positions • Rescales when resized
• Canvas • No layout logic • Manually control each aspect of layout
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
List Box as Container • DEMO
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Working with the Grid Control • DEMO
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Dependency Properties • In standard .NET code, property is defined using two procedures • “setter” and “getter”
• More complex mechanism here • Workflow uses same mechanism
• Dependency properties allow for: • Styling • Automatic data binding • Animation • Change notification • and more… Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
DependencyObject Class • DependencyProperty class acts as base for the properties • DependencyObject is base for classes that can consume and expose dependency properties • XAML classes expose far more properties than the corresponding prior classes • Need some internal plumbing to handle
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Investigating DependencyProperty • .NET maintains internal dictionary of classes and the properties they expose • DependencyProperty instance defined as a static/shared member of a class • In constructor, code registers property, its type, and hosting class with .NET • Can optionally create standard .NET property that wraps up the dependency property Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Declaring the Property VB: Public Shared IsAvailableProperty As DependencyProperty
C#: public static DependencyProperty IsAvailableProperty;
Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company
In Constructor [Visual Basic] MyClass.IsAvailableProperty = _ DependencyProperty.Register("IsAvailable", _ GetType(Boolean), GetType(MyClass)) [C#] MyClass.IsAvailableProperty = DependencyProperty.Register("IsAvailable", typeof(bool), typeof(MyClass))
Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company
Property Wrapper [Visual Basic] Public Property IsAvailable() As Boolean Get Return _ CType(GetValue(MyClass.IsAvailableProperty), Boolean) End Get Set(ByVal value As Boolean) SetValue(MyClass.IsAvailableProperty, value) End Set End Property
Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company
Property Wrapper [C#] public bool IsAvailable { get { return (bool) GetValue(MyClass.IsAvailableProperty); } set { SetValue(MyClass.IsAvailableProperty, value) } }
Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company
Using Attached Properties • Button control doesn’t expose Grid.Column or Grid.Row • Yet these attributes exist in the XAML markup
• These are attached properties • Properties added by container, when hosted • Retrieve and set using DependencyObject.GetValue
and DependencyObject.SetValue
Learn More @ http://www.learnnowonline.com Copyright © by Application Developers Training Company
Working with Attached Properties [Visual Basic] Dim row As Integer = CType(DemoButton.GetValue(Grid.RowProperty), Integer) DemoButton.SetValue(Grid.RowProperty, row + 1) [C#] int row = (int)DemoButton.GetValue(Grid.RowProperty); DemoButton.SetValue(Grid.RowProperty, row + 1);
Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company
Interacting with the Grid â&#x20AC;˘ Add code to move button to new row
Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company
Learn More! â&#x20AC;˘ This is an excerpt from a larger course. Visit www.learnnowonline.com for the full details!
Learn More @ http://www.learnnowonline.com Copyright Š by Application Developers Training Company