2009-10-02 30 views
1

我有一個StackPanel,我想從中刪除元素。在刪除元素之前,我想對元素執行動畫以指示元素即將被刪除。但是,通過刪除元素執行動畫會立即刪除元素,而不會顯示可見的動畫。有沒有一個正確的方法來做到這一點?即將從UI中刪除的元素的動畫

StackPanel myStackPanel = new StackPanel(); 
// myStackPanel is loaded with visible elements here. 

// Time to remove an element! 
MyUserControl control = myStackPanel.Children[0] as MyUserControl; 
control.SomeAnimation.Begin(); 
myStackPanel.Children.Remove(control); 

UPDATE 我結束了做以下醜陋得到這個工作的希望:

control.SomeAnimation.Begin(); 
Thread t = new Thread(delegate() 
{ 
    Thread.Sleep(500); 
    Dispatcher.BeginInvoke(() => myStackPanel.Children.Remove(control)); 
}); 
t.Start(); 

回答

1

您可以使用類似的完成情況(我相信還有其他途徑獲得相同的結果)。

private void SomeAnimation_Completed(object sender, EventArgs e) 
    { 
     //Then call your remove code or method. 
    } 

奇怪的是,混合3不顯示Storyboard.Completed彷彿intellesense事件,雖然VS 2008呢。

+0

這是一個很好的建議。然而,出於我的目的,動畫會作爲MyUserControl公開調用的一部分而觸發。類似於MyUserControl.FadeOut()的動畫淡出效果的動畫,但無法從MyStackPanel.FadeOut()方法訪問宿主StackPanel。 – David