我正在尝试创建动画,但在动画发生后执行某些代码时遇到问题。动画代码如下...
public static void Friend(Canvas canvas)
{
foreach (var element in canvas.Children.OfType<Image>())
{
var elementName = Regex.Split(element.Name, "_");
if (elementName[0] == "friend")
{
var slideDown = new DoubleAnimation
{
From = Canvas.GetBottom(element),
To = Canvas.GetBottom(element) - element.Height,
Duration = new Duration(TimeSpan.FromSeconds(1)),
AutoReverse = true
};
element.BeginAnimation(Canvas.BottomProperty, slideDown);
slideDown.Completed += (sender, e) => Test(sender, e, element, canvas);
}
}
}
之后发生的事件是……
var random = new Random();
element.Source = Core.StreamImage(Wardrobe.Friends[Wardrobe.RandomFriend()]);
Canvas.SetLeft(element, random.Next(0, (int)(canvas.ActualWidth - element.Width)));
// then reverse the previous animation.
如您所见,事件需要保留动画的上下文才能使其工作,但事件处理程序不允许这样做。我曾尝试直接在下面添加此代码,element.BeginAnimation
但它会过早执行。
我还尝试将动画的各个部分拆分为单独的函数,但当然你不能在一个对象上拥有多个动画,因为这些函数不会按顺序执行,导致只播放最后一部分。