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

Old Name New Name
Changeable Freezable
Text TextBlock
TextPanel TextFlow
UIElement::Transform UIElement::RenderTransform

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.

Layout Manager Managed To Change Again

FlowPanel replaced by StackPanel. Grid gets “*” style measurements via GridLength. TextFlow (formally known as TextPanel), now allows non-text content to flow with text.

Where fore art thou ImageEffect?

Fear not, ImageEffect is not dead, it is just undergoing a litte plastic surgery according to team members. It should be re-incarnated in the next drop.

Additions

EventTrigger + TriggerAction: A Solution To Declaritive Action Invoking

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:

TextEffect Unleashed

This is the suggested way to animate text now.

MarkupExtension: ‘*’ Magic And Resource Syntax Merged

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:

  • Bind – same as the old *Bind, but now done using { Bind }
  • StaticResource – replaces the old {resourceNameHere} syntax, now done using { StaticResource resourceNameHere }
  • Type – replaces the old *typeof, now done using { Type MyNamespace.MyType[, MyAssembly] }
  • Null – replaces the old *null, now done using simply { Null }

It should be noted that *Alias is still using magic to accomplish what it’s doing. Apparently this is going to be fixed in the next release.

VisualBrush Makes Its Debut

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.

0 thoughts on “Avalon: March ’05 CTP Change Log Commentary

  1. A few more changes I’ve noticed:

    * FixedPanel has been replaced by FixedDocument, but it doesn’t appear to be a simple name change.

    * StackPanel didn’t really replace FlowPanel. I think TextFlow replaces it more closely, since StackPanel doesn’t actually place multiple elements on the same line.

    * For globalization/localization, Windows now have an AutoSize attribute:

    http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/wcp_conceptual/winfx/globalizationlocalization/overviews/use_autolayout.asp

    * Command system is more fleshed out

  2. Hi. Now that UI context has gone how on earth do you access the main GUI thread from worker threads???? Any chance of a bit of sample code. Thanks

Leave a Reply