2009-08-04 8 views
2

I가 큰이WPF - 스토리 보드 이벤트

class Anima 
{ 
    Storyboard story; 
    Random rand; 
    Canvas canvas; 
    Ellipse target; 

    public Anima() { 
     rand = new Random(); 
     canvas = new Canvas(); 
     target = new Ellipse(); 

     target.Fill = Brushes.Red; 
     target.Width = 50; 
     target.Height = 50; 
     Canvas.SetLeft(target, rand.NextDouble() * 300); 
     Canvas.SetTop(target, rand.NextDouble() * 300); 
     canvas.Children.Add(target); 

     story = new Storyboard(); 
     story.BeginTime = TimeSpan.FromMilliseconds(rand.Next(500, 5000)); 

     DoubleAnimation a = new DoubleAnimation(); 
     a.To = rand.NextDouble() * 300; 
     a.Duration = new Duration(TimeSpan.FromMilliseconds(50)); 

     Storyboard.SetTarget(a, target); 
     Storyboard.SetTargetProperty(a, new PropertyPath(Canvas.LeftProperty)); 
     story.Children.Add(a); 

     DoubleAnimation b = new DoubleAnimation(); 
     b.To = rand.NextDouble() * 300; 
     b.Duration = new Duration(TimeSpan.FromMilliseconds(50)); 

     Storyboard.SetTarget(b, target); 
     Storyboard.SetTargetProperty(b, new PropertyPath(Canvas.TopProperty)); 
     story.Children.Add(b); 

     story.Completed += new EventHandler(story_Completed); 

     Window win = new Window(); 

     win.Loaded += delegate(object sender, RoutedEventArgs e) { 
      story.Begin(); 
     }; 

     win.Content = canvas; 
     win.Show(); 
    } 

    void story_Completed(object sender, EventArgs e) { 
     int next = rand.Next(500, 5000); 
     double left = rand.NextDouble() * 300; 
     double top = rand.NextDouble() * 300; 

     Console.WriteLine("position: ({0:G6}, {1:G6})", Canvas.GetLeft(target), Canvas.GetTop(target)); 
     Console.WriteLine("state : wait for " + next + " ms"); 
     Console.WriteLine("next : ({0:G6}, {1:G6})", left, top); 
     Console.WriteLine(); 

     (story.Children[0] as DoubleAnimation).To = left; 
     (story.Children[1] as DoubleAnimation).To = top; 

     story.BeginTime = TimeSpan.FromMilliseconds(next); 
     story.Begin(); 
    } 
} 

다 같이 게임을 설계 해요 완료,하지만 난 타원이 올바른 위치를 얻고 50 %로 2 %에 대한 오류를하지 않은 것을 발견 . 애니메이션이 끝나기 전에 Storyboard.Completed 이벤트가 트리거 된 것처럼 보입니다.

무엇이 문제입니까?

답변

0

사용 Dispatcher.BeginInvoke(...)에 시작하는 몇 가지 링크입니다, 당신은 바로 값을 얻을 수 있습니다

관련 문제