Ramblings from a compromised mind.

Avalon: March ’05 CTP Change Log Commentary

There have been several changes between the November ’04 drop of the Avalon CTP and the March ’05 drop. This article aims to offer a list with some insight on each of those changes. For a list of what’s changed with each update I make, click here.

Notable Name Changes

Fundamental Architecture Changes

UIContext Goes Bye Bye

UIContext has been thrown out. UIDispatcher has been renamed Dispatcher. DispatcherObject replaces UIContextObject. Dispatcher is now where you go to get your marshaling behavior via [Begin]Invoke .

Measurement Changes For The Better

The Length structure has been thrown out and most measurements are now in device independent pixels specified as the standard Double data type. The TypeConverter used for conversion still handles inches, mm, etc, but it converts the data immediately from the unit of measurment to the device independent pixel measurement and cannot be round tripped (problem for tools!). The notion of 100% is acheived by using the Stretch concept which different layout managers interpret on their own.

Additions

Remember how you couldn’t trigger animations without code in the previous builds? Well, this is the solution. It uses RoutedEvents to know when to kick off the associated actions. Actions for animation all derive from TimelineAction and include:

Remember all that * and { } magic? Well a standard abstract pattern has now been created around it. “Mini-language” syntax not really so bad/complex, plus can still be done with “normal” XAML syntax. Examples include:

This is one I’ve been waiting for personally. VisualBrush enables you to use any Visual’s render output as a Brush. The demo scenario for this is the ability to create a live thumbnail of any other Visual in your app. Imagine ALT+TAB in Longhorn, they could basically implement it with a real-time view of all the other windows in the system. VisualBrush is still crippled at this point though. Eventually you’ll also be able to interact with any content rendered by the Brush as if it were the actual Visual itself. Oh and just in case you’re wondering: Yes, 3D surfaces can be painted with this brush too.

The last sentence in that paragraphs tells you to use [Begin]Invoke off of a controls Dispatcher. You can get the Dispatcher for any given contro via it’s Dispatcher property[1]. So, basically, it’s the same pattern as WinForms.