At this point, with the amount of great content online (and free), it is possible to train yourself on WPF. But where to begin? There are a ton of links, blogs, documents, screencasts, videos and more -- so much, in fact, that beginning can be daunting. With this in mind, I have put together a 5 day guide, one for developers and one for designers, on how to get ramped up for someone who knows nothing. So, if you are ready to commit, here's my recommended path -- and I'd love people's feedback for what I may have missed or what really helped them.
But, before reading a line of documentation or drawing a line of vector art or writing a line of code, it is important -- no, critical -- to adopt the right mindset: a beginner's mindset. Without a healthy degree of humility, the process of learning WPF can become more of a hard fought struggle with technology instead of a successive cascade of delights in discovery and understanding.
Such a beginner's mindset does not come easily to our kind, designers and developers, who pride themselves on expertise and, moreover, whose very careers and success have been built by this expertise. Everyone has an ego, but the best designers and developers perhaps have, um, larger ones. When you are at the top of your game, it isn't easy to become a novice again. For designers, who have become one with their preferred tool, learning a new tool like Expression Interactive Designer or Graphic Designer can be not only humbling, but downright frustrating, especially when the tools themselves are still pre-beta. For developers, who are utterly proficient in a given platform technology, learning a new API as vast as WPF -- an API not fully documented and with at least 3 ways of doing any one thing -- can be rocky.
But, with the right attitude of humility and curiosity, the curve can be hit without undue harm. (Certainly, a dose of masochism doesn't hurt for anyone to brave the pain of working on pre-release software: it is called the bleeding edge for a reason.)
So, on to the course:
Day 1 has NO hands-on activities. This is counter-intuitive to how many people learn, whose instinct is to just dive in. But with WPF, it is absolutely worth sacrificing a day to get the big picture before diving in. The rest of my prescription is hands-on, so just suck it up on day 1 and watch/read without being tempted to write any code or touch any pixels.
Who: Developers and DesignersWhat: Watch Michael Wallent's presentation from MIX. Check out See Windows Vista. This will give you an understanding of the overall vision for WPF and, more importantly, a sense of the possibilities of the platform by seeing some of the very best demos on the platform.
Who: DevelopersWhat: Watch Developing a WPF Application
Who: DesignersWhat: Watch A Designer's Overview of WPF and Introducing Microsoft Tools for Professional Designers
Go have lunch.
Now, get your environment set up so you can begin playing. Plan an hour for downloading and installing all of the software necessary for XP; if you are going to use Vista, plan for more time to download and install it. Developers go here and designers go here. Okay, now back to the learnin'.
Who: Developers (and Designers who aren't intimidated by mark up XML)What: Read through the Getting Started In the SDK You will feel like it is too simple, but do it. Provides conceptual info hands-on. You will be doing some cut/paste into XAMLPad.
Who: DesignersWhat: Watch demos and tutorials up at http://www.microsoft.com/products/expression/en/interactive_designer/demos.mspx
Now you get your hands dirty. Still, you will be relagated to "hello world" and drawing primitives, again humiliating. But stick with the program. Learning to crawl before learning to run is really important with WPF.
Who: DevelopersWhat: Do SDK tutorial on Creating a WPF Application Or, if you can get your hands on Charles Petzold's Applications = Code + Markup, skip the SDK and work your way through his book. Another option is to do the Microsoft eLearning course, which is free now and will only be $9.99 after ship.
Who: DesignersWhat: Do the first half of the Fabrikam tutorials that are part of EID
Who: DevelopersWhat: Do SDK tutorial on Adding 2D Graphics and Data Binding. Or, keep reading Charles Petzold's Applications = Code + Markup.Who: DesignersWhat: Do the second half of the Fabrikam tutorial that is part of EID
Who: Developers and Designers not intimidated by mark upWhat: Play with the SDK Viewer Sample
By now you are starting to get it. But don't get cocky. You have a long way to go. Okay, maybe I'm not giving you enough credit. Let's give you a test:
--Can you explain the difference between a template and a style in WPF?--Can you explain the difference between a timeline and a clock when using Animation?--Why would you use a ContentControl as compared to a UserControl?--How do you apply resources from EGD into EID?--What is the relationship between vectors and bitmaps in EGD?--How do you trigger animations that also trigger media in EID?
Maybe you can answer all these questions. But maybe you can't. Stick with the program...
Who: DevelopersWhat: Read the following SDK topics on the various sub-systems of WPF: Fundamentals, Data, Graphics and Media It's the morning, so you are ready for more conceptual knowledge. Conceptual understanding is key in WPF so you know what happens when, say, you use the layout system or the animation system. It is important you understand the functionality, limits and costs of each WPF subsystem -- as well as how each subsystem works togethers.
Who: DesignersWhat: Go play with EGD. Do its tutorials. Play around with exporting to XAML and pulling that into EID and read this post on how to do it. Watch this channel 9 screencast and download accompanying code that really gets into workflow between tools. If an Illustrator user, try out Mike Swanson's exporter. If a Fireworks user, try this converter to XAML. Also, realize that you can cut/paste between EGD and Illustrator with some lossiness but pretty accurate nonetheless.
Who: Developers and Designers TogetherWhat: Plumb through all the samples that are in the SDK and EID. Poke around the blogsphere to find other samples. The WPF Community site is a great place to find samples too. Knowing they are there will be invaluable when you later want to do something.
Okay, now you are ready to go out on your own, but with some guidelines. Come up with a very simple prototype application to try, such as a simple game or simple application. Maybe try porting an existing application you have written to see how it would be done in WPF. If that is too loose, try extending one of the application samples in the SDK.
A great model of this is up on http://www.thewpfblog.com. In that blog, you can see someone real time experimenting with WPF and watch him hit the curve and discover WPF. Many times, he is taking an existing project he knows and moving it to WPF.
Go back and rewrite whatever you wrote in Day 4. Invariably, you didn't get it right the first time. Know that you will rewrite it. This is a truism of WPF that I continually encounter as do many other folks I've worked with. You never get it right the first time.
Now, you wrote your app and it performs like crap. Go read the Optimzing WPF Application Performance paper and then go get familiar with the WPF perf tools and fix it.