After really taking a look at SilverlightFX I realized that Nikhil's implementation of an AnimatedPanel is clearly superior to other implementations out there (See here for an example) . There were two notable features of his implementation that led me to this conclusion. The first is that it uses the robust procedural animation system that comes with SilverlightFX (aka System.Windows.Media.Glitz). The second is that it does animated layout atomically (from VStackPanel.cs in SilverlightFX):
BeginArrange();
foreach (UIElement element in Children) {
if (element.Visibility != Visibility.Collapsed) {
childRect.Y += previousChildHeight;
if (firstChild == false) {
childRect.Y += childSpacing;
}
previousChildHeight = childRect.Height = element.DesiredSize.Height;
switch (alignment) {
case HorizontalAlignment.Stretch:
childRect.Width = Math.Max(finalSize.Width, element.DesiredSize.Width);
break;
case HorizontalAlignment.Left:
childRect.Width = Math.Min(finalSize.Width, element.DesiredSize.Width);
break;
case HorizontalAlignment.Right:
childRect.Width = Math.Min(finalSize.Width, element.DesiredSize.Width);
childRect.X = finalSize.Height - childRect.Height;
break;
case HorizontalAlignment.Center:
childRect.Width = Math.Min(finalSize.Width, element.DesiredSize.Width);
childRect.X = (finalSize.Width - childRect.Width) / 2;
break;
}
ArrangeElement(element, childRect);
firstChild = false;
}
}
EndArrange();