I recently had the chance to read WPF
Unleashed by Adam Nathan.

I can’t imagine a better book to
learn WPF for developers with a good win32/GDI/Windows Forms background. If you
are not already experienced in these fields, then you’ll certainly find this
book overwhelming.
What I really enjoyed is that the
author has a mature vision about WPF although we are still in the early days of
this platform. What I mean by mature vision is that the book is full of non
trivial tips and also contains a lot of advanced remarks that shed lights on
implementation details.
WPF is still young from MS clients
point of view, but for MSFT insiders, WPF is 6 or 7 years old (or even older?!
btw I would like to know the history of the WPF development). I remember Don
Box introducing XAML 4 years ago during the PDC 2003 KeyNote. Adam is a senior
software development engineer in Microsoft’s .NET Developer Division since
1999, hence the unique vision provided in the book.
The author did also a great job at
underlining the intentions behind each part of WPF. As a former technical
author, I consider that explaining the intentions surrounding a technical
subject as the most important part of writing. Technology is all about
intentions! You won’t do anything good with an API as long as you don’t
understand the intentions that motivated the engineers who developed it. In my
opinion, MSDN often lacks intentions and it is its biggest flaw (although this
point got a bit better in the last years).
Another good point is that the book comes
with an excellent 50 pages introduction about WPF 3D done by Daniel Lehenbauer, the Lead
Developer Responsible for WPF 3D. Here also, you can feel that each remark and
each tip provided will be a great help once you’ll have to use WPF 3D in the
real-world.
Finally, WPF Unleashed layout is colorful. It certainly makes the reading more pleasant. This particular details generated many talks.
WPF Unleashed is a great book, but
WPF is a fantastic technology. I’m really looking forward using it in my own
developments. Here are some rambling about some cool details that positively surprised me
as a win32/GDI/Windows Forms developer:
- Most of WPF code will be XAML
declarative code and not C# or VB.NET procedural code. XAML is a
general-purpose declarative language based on XML. Although it is heavily
used by WPF, some others framework such as Windows Workflow Fundation use
XAML and you can easily use it to handle your own scenarios. XAML code
doesn’t compile to IL or C# or VB.NET code but to a binary form (the BAML
format). BAML has the double advantage over XML that it yields lighter
documents and that BAML documents can be parsed more quickly. Concretely,
most of XAML code will be automatically generated by tools. There is no
doubt that this XML format will be easier to parse than the messy Windows
Forms generated code. Hence, I expect that XAML editors such as the
upcoming Microsoft Expression Blend will be much more reliable than the
Windows Forms ones.
- Windows Forms heavily relies on
the notion of .NET properties. The engineers of WPF thought that .NET
properties were not enough to handle common WPF scenarios and they
introduced Dependency
Properties. The value of a Dependency Property depends on one or
several providers for determining its value at any point of time. For
example, the notion of WPF animation continuously modifies the value of a
Dependency property to move or rotate an UI object. Dependency Property is
the corner-stone to provide declaratively (in XAML) your own logic on
value change notifications. Dependency Property is also great to handle
inheritance scenario such as: the font of a panel have been changed, which
control child’ font should be updated?
- WPF comes with an entire new
API to draw things on the screen. The main difference with the GDI API is
that WPF is a completely retained mode
graphics system rather than an immediate mode
graphics system as GDI. Basically, in immediate mode it is your
responsibility to draw the correct pixels when a region of the screen is
invalidated (hence the famous WM_PAINT and OnPaint). In retained mode you
just have to describe higher-level concepts such as “place a 10x10 blue
square at (0,0)”. Clearly retained mode is a simpler way to code complex
UI scenarios and it also represents the magic that makes WPF a 100% vector
based framework.
- WPF relies heavily on the
logical tree vs. visual trees paradigms. Logical tree is the well know controls
tree (a Panel contains 2 GroupBoxes that each contains two Buttons and a Textbox…).
Developers will be mainly concerned by the logical tree. The visual tree
is the visual representation of things that will be displayed on screen by
the retained mode graphics engine. Although a ListBox is logically a
single control its default visual tree representation is composed of more
primitive WPF elements such as a Border, one or two scrollbars… In WPF the
visual tree is decoupled from the logical tree. Thus it is easy to do
crazy things such as displaying items of your ListBox on the faces of a
rotating 3D polygon.
As Adam pinpoints in his
introduction, WPF is the definitive technology to allow doing UI that looks
like what you see in the Hollywood movies, such as slick 3D animations when you
print a document or when you send a mail. Usability issues aside, Hollywood has
been telling us for a long time that software in the real world isn’t as
compelling as it should be.
Posted
Tue, Aug 21 2007 7:16 PM
by
Patrick Smacchia