2011-04-27 87 views
4

從我的代碼隱藏我想在特定的UIElement上開始動畫,當動畫結束時,我想對UIElement做一些其他處理。我在計算如何將作爲動畫完成事件的發件人收到的AnimationClock對象轉換爲執行動畫的UIElement對象時遇到問題。從動畫完成事件獲取UIElement

下面是我用它來構建和啓動動畫代碼:

DoubleAnimation FadeOutAnim = new DoubleAnimation(1, 0, TimeSpan.FromSeconds(.5)); 
FadeOutAnim.Completed += new EventHandler(FadeOutAnim_Completed); 

UIElement element = lstMessages.ItemContainerGenerator.ContainerFromItem(sender) as UIElement; 
if(element != null) 
    element.BeginAnimation(UIElement.OpacityProperty, FadeOutAnim); 

這裏是我完成的事件,我想再次訪問UIElement

void FadeOutAnim_Completed(object sender, EventArgs e) 
    { 
     UIElement animation = sender; //This is an AnimationClock and I can't seem to figure out how to get my UIElement back. 

    } 

任何幫助將不勝感激。

回答

6

如果處理程序是無用的(我的一個無法找到一個辦法讓動畫元素後面),你可以只再多問事件,這確實包含了信息:

private event EventHandler FadeAnimationCompleted; 
private void OnFadeAnimationCompleted(object sender) 
{ 
    var handler = FadeAnimationCompleted; 
    if (handler != null) 
     handler(sender, null); 
} 
FadeAnimationCompleted += new EventHandler(This_FadeAnimationCompleted); 
FadeOutAnim.Completed += (s, _) => OnAnimationCompleted(element); 
void This_FadeAnimationCompleted(object sender, EventArgs e) 
{ 
    //Sender is the UIElement 
} 

更容易的是在委託中直接調用方法:

FadeOutAnim.Completed += (s, _) => FadeAnimationCompleted(element); 
void FadeAnimationCompleted(UIElement element) 
{ 
    //Meaningful code goes here. 
} 
+0

感謝,方便和偉大。 – 2016-05-13 06:45:52