2009-12-23 90 views
0

我在画布中有一些控件。我需要动画他们的Canvas.Top和Canvas.Left属性。我使用的是我开始所有动画的foreach:如何在动画后为一组对象设置属性

foreach (Control c in controls) 
{ 
    tc.BeginAnimation(Canvas.TopProperty, yAnimation); 
    tc.BeginAnimation(Canvas.LeftProperty, xAnimation); 
} 

其中xAnimation和yAnimation是两个DoubleAnimation。 一切工作正常,但在动画这些对象后,我不能拖动它们了。我发现here的原因和解决方案(在动画完成事件处理程序中设置最终值),但它似乎并没有为我工作:在我的问题中,我有一堆对象,并在动画完成事件处理程序我有没办法得到哪个对象的动画结束。 任何想法?

回答

0

您是否尝试过首先在链接中描述的方式?

设置动画的FillBehavior物业停止

+0

是的,我试过了。问题是:当动画完成时,我应该在事件处理程序中设置明确的值,但我不知道哪个控件涉及到。假设我有3个控件c1,c2和c3。我希望他们的Canvas.Top属性为c1为10,c2为20,c3为30。通过动画这可以很好地工作。当动画完成时,我应该在Completed事件处理程序中手动将c1的Top属性设置为10,c2的为20,c3的为30。我如何知道这3个控件中的哪一个完成了动画,并且应该设置为最终值? – loris 2009-12-24 14:54:43

0

我解决了这种方式:每个动画完成时,该委托执行:

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

方法setFinalXValues(项目)删除动画和为动画中涉及的所有项目设置最终值。不是一个好方法,但它的工作原理。如果你有更好的想法,请发表。

相关问题