2009-10-02 5 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

당신은 완료 이벤트 (나는 점점 다른 방법이 있다는 확신 같은 것을 사용할 수 있습니다 같은 결과). VS 2008 않습니다하지만 이상하게도

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

, 혼합 3 intellesense하지만 이벤트로 Storyboard.Completed를 표시하지 않습니다.

+0

좋은 제안입니다. 그러나 내 목적에 따라 MyUserControl에 대한 공개 호출의 일부로 애니메이션이 실행됩니다. 페이드 아웃 효과를 애니메이션화하는 MyUserControl.FadeOut()과 비슷한 것이지만 MyStackPanel.FadeOut() 메서드에서는 호스팅하는 StackPanel에 액세스 할 수 없습니다. – David

관련 문제