【问题标题】:How to set a property for a group of objects after animating it动画后如何为一组对象设置属性
【发布时间】:2009-12-23 17:36:17
【问题描述】:

我在 Canvas 中有一些控件。我需要为他们的 Canvas.Top 和 Canvas.Left 属性设置动画。我正在使用一个 foreach 来启动所有动画:

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

其中xAnimation和yAnimation是两个DoubleAnimation。 一切正常,但是在为这些对象设置动画后,我不能再拖动它们了。我找到了here 的原因和解决方案(在动画完成事件处理程序中设置最终值),但它似乎对我不起作用:在我的问题中我有一堆对象,并且在动画完成事件处理程序中我无法让哪个对象的动画结束。 有什么想法吗?

【问题讨论】:

    标签: c# wpf animation


    【解决方案1】:

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

    将动画的 FillBehavior 属性设置为 Stop

    【讨论】:

    • 是的,我试过了。问题是:动画完成后,我应该在事件处理程序中设置最终值,但我不知道所涉及的控件是哪个。假设我有 3 个控件 c1、c2 和 c3。我希望他们的 Canvas.Top 属性为 c1 为 10,为 c2 为 20,为 c3 为 30。使用动画效果很好。动画完成后,我应该在 Completed 事件处理程序中手动将 c1 的 Top 属性设置为 10,c2 的设置为 20,c3 的设置为 30。我如何知道这 3 个控件中的哪一个完成了动画并且应该设置为最终值?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2017-08-10
      • 1970-01-01
      • 2021-07-19
      • 2011-01-26
      相关资源
      最近更新 更多