It’s out, and there’s been a lot of great work since the last major CTP. Layered Windows is probably the big-name feature for this release, at least out of my team (see http://blogs.msdn.com/nickkramer/archive/2005/12/14/503644.aspx for details). But we also did a ton of work on tightening the implementation of xaml to match the spec, which will do a lot to help Expression and Cider read and write xaml. (After all, the spec isn’t worth the paper it’s written on WPF doesn’t implement it…)
One of the hidden features we did was to support non-FEF (baml) templates. Previously, templates were all about creating FrameworkElementFactory’s (FEFs). And we still support those, we didn’t remove that api. But there were a number of things that FEFs didn’t support, such as the root of the template being a non-FrameworkElement, IAddChild-related weirdness around what constitutes a child, and a number of scenarios whose details I’ve forgotten that involved data binding & other markup extensions.
Now, FEFs were always similar in purpose to baml, both are essentially a sequence of instructions on how to create an object. So we introduced a way to create templates out of baml — now we just use the normal xaml parser on the contents of the template, and create a baml template. And because it’s now the normal parser logic, rather than some weird FEF parser, templates are way more consistent with what you can do outside of templates. The best part of all this is you don’t have to do anything to take advantage of this feature — your existing xaml templates are now free of FEF’s and their limitations!