我创建了一个简单的子类StackPanel
,我可以使用动画在屏幕上移动TranslateTransform
。它看起来像这样:
public class MovingStackPanel : StackPanel
{
public void BeginMove(Point translatePosition)
{
RenderTransform = new TranslateTransform();
Duration d = new Duration(new TimeSpan(0, 0, 0, 0, 400));
DoubleAnimation x = new DoubleAnimation(translatePosition.X, d);
DoubleAnimation y = new DoubleAnimation(translatePosition.Y, d);
/*
Storyboard.SetTarget(x, RenderTransform);
Storyboard.SetTargetProperty(x, new PropertyPath("X"));
Storyboard.SetTarget(y, RenderTransform);
Storyboard.SetTargetProperty(y, new PropertyPath("Y"));
Storyboard sb = new Storyboard();
sb.Children.Add(x);
sb.Children.Add(y);
sb.Completed += sb_Completed;
sb.Begin();
*/
RenderTransform.BeginAnimation(TranslateTransform.XProperty, x);
RenderTransform.BeginAnimation(TranslateTransform.YProperty, y);
}
void sb_Completed(object sender, EventArgs e)
{
Console.WriteLine("Completed.");
}
}
这是我的问题:如果我像上面的代码那样直接为 X 和 Y 属性设置动画,它就可以工作。但是,如果我使用上面的注释掉的代码,这实际上是Storyboard
可以想象的最简单的 in 代码创建,则什么也不会发生。动画运行 - 至少, Completed 事件被引发 - 但屏幕上没有任何变化。
显然我做错了什么,但我看不到它是什么。我见过的每个用代码创建故事板的例子都是这样的。很明显有一些关于动画和故事板的东西我还不知道:它是什么?