2012-04-30 32 views
3

我希望有人能幫助我,我認爲這是一個相對直接的問題。從WPF中的DoubleAnimation Completed事件獲取目標控件?

我使用DoubleAnimation對象在代碼中設置淡出動畫。它淡出圖像,然後在完成時觸發Completed事件。

我想從事件處理程序中獲取淡出動畫應用到的控件的名稱,但我找不到方法。

任何幫助表示讚賞。謝謝。

DispatcherTimer timer = new DispatcherTimer(); 

public MainWindow() 
{ 
    InitializeComponent(); 

    image1.Visibility = System.Windows.Visibility.Visible; 
    image2.Visibility = System.Windows.Visibility.Collapsed; 

    timer.Interval = TimeSpan.FromSeconds(2); 
    timer.Tick += new EventHandler(timer_Tick); 
    timer.Start(); 
} 

void FadeOut(UIElement element) 
{ 
    DoubleAnimation FadeOut = new DoubleAnimation(1, 0, new Duration(TimeSpan.FromSeconds(0.5))); 
    FadeOut.Completed += new EventHandler(FadeOut_Completed); 
    element.BeginAnimation(OpacityProperty, FadeOut); 
} 

void FadeOut_Completed(object sender, EventArgs e) 
{ 
    // How to find out which control was targeted? 
} 

void timer_Tick(object sender, EventArgs e) 
{ 
    if (image1.Visibility == System.Windows.Visibility.Visible) 
    { 
     FadeOut(image1); 
     //image1.Visibility = System.Windows.Visibility.Collapsed; 
     //image2.Visibility = System.Windows.Visibility.Visible; 
    } 
} 
+0

sender?這個動畫的目標沒有明確設置,所以如果它的工作肯定是發件人 – EvAlex

+0

如何明確設置目標? PS。更新了代碼以包含計時器滴答事件。 – Tas

+0

我有點不對,但找到了解決辦法。看到我的回答 – EvAlex

回答

5

以下代碼爲您提供了完成動畫的目標。將它放在FadeOut_Completed()處理程序中:

DependencyObject target = Storyboard.GetTarget(((sender as AnimationClock).Timeline as AnimationTimeline)) 

但是,只有在指定了動畫目標對象的情況下才能使用。要做到這一點,添加以下FadeOut()方法:

Storyboard.SetTarget(FadeOut, element); 
+0

非常感謝! – Tas

相關問題