2012-02-07 79 views
1

我將一個動畫應用到圖像的Canvas.BottomProperty,以便在我想讓它隱藏時「捲起」圖像。AnimationComplete關於哪個對象?

我在看動畫的Completed事件。處理程序可用的對象是具有時間軸的AnimationClock,它是動畫本身。

我想知道這個事件已經觸發了哪個圖像,即我稱之爲BeginAnimation的圖像。這是不可用,還是我只是想念它?

我試過的一件事是將動畫對象存儲在字典中,並在Completed事件處理程序中查找它。但是,我發現的是,下面稱爲「時間軸」的動畫與BeginAnimation調用中使用的動畫不同。換句話說,返回的動畫顯然是不一樣的一個通過

animatedImage.BeginAnimation(Canvas.BottomProperty, animation); 

發送(下面的代碼是調用BeginAnimation之前,當然)。

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

回答

1

您可以定義一個helper方法是這樣的:

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);