C# 如何在为一组对象设置动画后为其设置属性

C# 如何在为一组对象设置动画后为其设置属性,c#,wpf,animation,C#,Wpf,Animation,我在画布上有一些控件。我需要动画他们的画布。顶部和画布。左侧属性。我正在使用一个foreach来启动所有动画: foreach (Control c in controls) { tc.BeginAnimation(Canvas.TopProperty, yAnimation); tc.BeginAnimation(Canvas.LeftProperty, xAnimation); } 其中xAnimation和yAnimation是两个双重动画。 一切正常,但在设置这些对象的动画

我在画布上有一些控件。我需要动画他们的画布。顶部和画布。左侧属性。我正在使用一个foreach来启动所有动画:

foreach (Control c in controls)
{
   tc.BeginAnimation(Canvas.TopProperty, yAnimation);
   tc.BeginAnimation(Canvas.LeftProperty, xAnimation);
}
其中xAnimation和yAnimation是两个双重动画。 一切正常,但在设置这些对象的动画后,我不能再拖动它们了。我找到了原因和解决方案(在动画完成事件处理程序中设置最终值),但它似乎对我不起作用:在我的问题中,我有一堆对象,而在动画完成事件处理程序中,我无法获得哪个对象的动画结束。
有什么想法吗?

您是否尝试了链接中首先描述的方法

将动画的FillBehavior属性设置为“停止”


我是这样解决的:当每个动画完成时,将执行此委托:

xAnimation.Completed += delegate
{
   if (++completedXAnimations == n)
   {
       setFinalXValues(items);
   }
};

方法setFinalXValues(items)删除动画并为动画中涉及的所有项目设置最终值。这不是一个好方法,但它很有效。如果你有更好的想法,请发出去。

是的,我试过了。问题是:当动画完成时,我应该在事件处理程序中设置最终值,但我不知道涉及哪个控件。假设我有3个控件c1、c2和c3。我想要画布。c1的顶部属性为10,c2的顶部属性为20,c3的顶部属性为30。对于动画,这很好。动画完成后,我应该在已完成的事件处理程序中手动将c1的Top属性设置为10,c2的属性设置为20,c3的属性设置为30。我如何知道这3个控件中的哪一个完成了动画并应设置为最终值?