I'm just playing around with WPF at the moment and I don't entirely understand how it works, but this is baffling. I have a piece of code which creates a TextBlock with a RenderTransform and animates it scrolling across the screen. This is pretty much a procedural translation of something Josh Smith wrote to demonstrate how you might do a marquee tag.
This is the bit of code :
NameScope.SetNameScope(this, new NameScope());
var anim = new DoubleAnimation
           {
               From = 300,
               To = -100,
               By = -5,
               Duration = new Duration(TimeSpan.FromSeconds(10)),
               RepeatBehavior = RepeatBehavior.Forever
           };
var transform = new TranslateTransform();
this.RegisterName("translate", transform);
var text1 = new TextBlock {Text = "Hello", RenderTransform = transform};
Storyboard.SetTargetName(anim, "translate");
Storyboard.SetTargetProperty(anim, new PropertyPath(TranslateTransform.XProperty));
var myStoryBoard = new Storyboard();
myStoryBoard.Children.Add(anim);
this.Children.Add(text1);
myStoryBoard.Begin(this, true);
I thought it might be neat to have a class which derives from StackPanel implement this, so, because this lived in the OnInitialized method on the original window, I moved it to the same method in the new StackPanel derived class :
public class MyPanel : StackPanel
{
    protected override void OnInitialized(EventArgs e)
    {
        base.OnInitialized(e);
        //code went here...
    }
}
But if I do this, I get a "Stack empty.  Error in markup file" XamlParseException thrown.
Oddly, if I move the entire function into the constructor of MyPanel, everything works fine.
Can anyone explain what I'm doing wrong?