WPF Tutorial

Intertech Tutorials

The WPF Tutorial Objective

Every few years or so, Microsoft introduces a new GUI toolkit. Since the release of .NET 3.0, the latest toolkit is Windows Presentation Foundation (WPF). In this introduction, you will understand the motivation behind WPF, learn the syntax of XAML, examine the core programming model, and survey several WPF services. Also, you will overview the WPF support provided by Visual Studio and Expression Blend. As you would expect, this chapter provides a foundation for the remainder of the class.

The Motivation Behind WPF

Historically speaking, building a desktop UI under the Windows OS involved using a handful of key services:

Although Windows programmers could make use of these services using C or C++, many UI toolkits were introduced over the years. VB6, MFC, Windows Forms, GDI+, and so on. Each one of them was simply a wrapper around User32 / GDI. These toolkits still viewed DirectX as an ‘external’ service.

Windows Presentation Foundation (WPF) is a brand-new GUI toolkit that shipped beginning with NET 3.0. The core WPF object model is similar, but not identical to, Windows Forms. The release of WPF does not imply that Windows Forms is obsolete. In fact, the .NET platform will support this API for years to come.

Like other .NET 3.0 / 3.5 technologies, WPF can be used under XP, Vista, or Windows Server 2003 and higher. The .NET 3.0 / 3.5 libraries ship automatically with Vista. Other OSs will require a separate installation of the 3.0 / 3.5 libraries through the freely downloadable .NET runtime installation program (the 3.5 version of dotnetfx.exe).

Before the release of WPF, UI developers were forced to master a number of related, but ultimately independent, APIs. This required developers to ‘switch gears’ when moving from one task (e.g., building a main window) to another (e.g., 3D graphical rendering). The end result was a very asymmetrical way to program.

Consider the GUI development world before .NET 3.0:

Desired Functionality Pre-.NET 3.0 Solution
Forms, dialog boxes, controls Windows Forms, VB6, MFC, and so on
2D graphics System.Drawing.dll (e.g., GDI+) or raw C-based GDI
3D graphics DirectX
Streaming Video Windows Media Player API
Fixed / Flow documents PDF APIs

With the release of WPF, things have improved considerably. You now have a single symmetrical manner in which to interact with the necessary GUI infrastructure. Consider the GUI development world as of .NET 3.0 and higher:

Desired Functionality .NET 3.0 and Higher Solution
Forms, dialog boxes, controls Windows Presentation Foundation
2D graphics Windows Presentation Foundation
3D graphics Windows Presentation Foundation
Streaming Video Windows Presentation Foundation
Fixed / Flow documents Windows Presentation Foundation

Beyond offering a unified programming model, WPF also provides a clear separation of concerns. It is now possible to separate the look and feel of a GUI application from the programming logic that drives it. This is achieved using an XML-based grammar termed XAML (‘zam-el’). While most WPF applications will make use of XAML, doing so is entirely optional.

This separation of concerns (via XAML) makes it much simpler for graphical designers to build very rich, professional UIs. Graphically minded individuals can use dedicated design tools such as Microsoft Expression Blend to generate the XAML. These XAML files can then be passed to the programming team to add logic to drive the UI (event handlers, method overrides, and so on). Better yet, a Microsoft Blend project uses exactly the same format as a Visual Studio project.

Beyond the introduction of XAML, WPF also provides a good number of integrated services, including (but not limited to) the following:

Overall, WPF can be considered a ‘supercharged’ UI framework. WPF is extremely useful when you need to build highly interactive, stylized front ends. Real-time rotation of 3D bar charts, spinning a portion of a UI to a 45-degree angle, and dynamic shadowing on a rendered image are all possible.

Consider the following WPF application (an example project from Expression Blend). Clicking on any buttons on the bottom of the application will rotate and animate a motorcycle prototype. Each button has a custom animation, performed when the cursor travels over the surface. While all of this could be done without WPF, doing so would require a considerable amount of complex code.

Viewer 3D

Because WPF applications are so graphically intensive, a production-level WPF application will require the aid of a professional graphic designer. You may agree that most .NET programmers are not the best of artists. Likewise, most artists are not the best of .NET programmers. Using XAML and tools such as Visual Studio and MS Expression Blend, each part of the team can use dedicated tools, thus increasing efficiency in development. Remember that the same Visual Studio WPF application can be opened in Expression Blend.

This is not to suggest that you cannot use WPF to build ‘traditional’ GUIs (gray push buttons, a grid, a menu system, and so on). You can certainly use WPF to build traditional business applications. However, this API is strongly geared for next-generation GUI applications. WPF is closer to the ‘Hollywood vision’ of what computer applications should look like (e.g., 3D spinning e-mail messages, glowing animated blocks of text, and the like).

GUI applications that do not need this extra horsepower still gain benefits (separation of concerns, object model integration, and more). However, in some cases, Windows Forms may provide a more direct development path. Be aware that some of these ‘supercharged’ graphic features of WPF will require a ‘semi- supercharged’ machine to run them at an acceptable rate. Testing is always a good idea.

Copyright (c) 2008-2013. Intertech, Inc. All Rights Reserved. This information is to be used exclusively as an online learning aid. Any attempts to copy, reproduce, or use for training is strictly prohibited.