AnimationComplete在哪个对象上?

时间:2012-02-07 17:08:36

标签: wpf .net-3.5

我将动画应用到图像的Canvas.BottomProperty,以便在我希望隐藏图像时“卷起”图像。

我正在看动画的已完成事件。处理程序可用的对象是AnimationClock,它具有Timeline,它是Animation本身。

我想知道这个事件触发了哪个Image,即我称之为BeginAnimation的Image。那是不可用的,还是我错过了?

我尝试过的一件事是将动画对象存储在字典中并在Completed事件处理程序中查找。但是,我发现下面作为“时间轴”引用的动画是与BeginAnimation调用中使用的不同的对象。换句话说,返回的动画显然与通过

发送的动画不同
animatedImage.BeginAnimation( Canvas.BottomProperty, animation );

(当然,以下代码在调用BeginAnimation之前。)

animation.Completed += ( o, e ) =>
{
    var timeline = ( ( AnimationClock ) o ).Timeline;

1 个答案:

答案 0 :(得分:1)

您可以定义一个这样的辅助方法:

private static void AnimateProperty(
    UIElement element,
    DependencyProperty property,
    double toValue,
    Duration duration,
    Action<UIElement> completed)
{
    DoubleAnimation a = new DoubleAnimation(toValue, duration);
    a.Completed += (o, e) => completed(element);
    element.BeginAnimation(property, a);
}

然后像下面这样调用它。在示例中,我在动画完成时将元素设置为不可见。

AnimateProperty(imageElement, Canvas.BottomProperty, -100, TimeSpan.FromSeconds(1),
                element => element.Visibility = Visibility.Hidden);