Author: Adam Nathan
Publisher: Sams, 2010
Aimed at: Anyone wanting to understand WPF
Pros: Really good coverage of WPF
Cons: Introduces XMAL too soon for comfort, sometimes lacks depth
Reviewed by: Mike James
This is the latest edition of a well known and well regarded volume on WPF. (For a review of the previous edition see - Windows Presentation Foundation Unleashed).
If you have the previous edition then don't be fooled by the fact that there are still six Parts. Part III is new and on controls and pushes the other parts down by one and drops the final part that used to contain the appendices.
Part I is an overview of WPF and introduction to XAML. Personally I don't think that the focus on XAML is the right place to start. It is usually much easier to understand how WPF works and what is going on by looking at the code that implements it or the code that uses the facility. The XAML is then just a simple transformation of the active object creation and initialisation into a set of declarations. However, the coverage of XAML goes well beyond the usual surface level stuff and includes information about compiled XAML, how the namespaces work, its relationship with the various object trees and reading and writing XAML.
The final chapter of the first part deals with WPF fundamentals - the class hierarchy, logical and visual trees and Dependency properties. This takes us into Part II which is about building a WPF application. Here we encounter the basics of building a UI - the layout mechanism, layout panels, events, deployment and using Windows 7 features. This is a good introduction to the ideas that make WPF special but occasionally it doesn't go deep enough. For example, it explains routed events, and goes into the new multi-touch events, but surprisingly it only provides examples for the multi-touch events. If you are more traditional and struggling with mouse drag-and-drop or mouse based selection then you will have to look elsewhere for practical details.
Part III deals with controls and it is a categorised exploration of the standard controls - content controls, item controls and images, text and other controls. This is an interesting and informative catalog of what you can do to build a UI using mostly XAML. It is probably the part of the book that you will return to most often as you work with WPF.
Part IV has the title "Features for Professional Developers" and I'm not at all sure why the features covered are "professional" - resources, data binding, styles templates, skins and themes. There is also an argument that data binding is more fundamental than the other features and probably should be split out into its own chapter or part. It probably doesn't matter because the chapters are fairly self contained.
Part V is perhaps the most exciting for the average programmer - 2D graphics, 3D graphics, animation, audio, video and speech. Unfortunately this is the weakest part of the book simply because it needs to be a book in its own right. There is so much more to using even 2D graphics in WPF, let alone 3D graphics. As far as this section goes it's great - but you will need more information after you have got started.
The final part is a collection of topics that didn't fit elsewhere in the book. Interoperability with WPF technologies is mainly about mixing Windows forms controls and ActiveX with WPF and vice versa, but it also mentions using DirectX. The final two chapters describe how to build User and Custom Controls and Custom Layout panels. Again, excellent introductions that will get you started but they demand a separate book to provide the depth needed.
The book is printed in full color and this is used to good effect throughout - it not only makes it look good but it is easier to read and understand. The author's style is very readable and clear with plenty of asides that fill in missing detail without being disruptive of the overall flow of the book.
Whatever minor criticism have been listed above this is a really good book on WPF and, as with the first edition, the only real problem is that it can't possibly cover the whole subject in sufficient depth.
It isn't for the complete beginner and it isn't a "how-to" or cookbook - it is about explaining the ideas rather than providing real world examples.
If you work with WPF you really need a copy of this book.