2013-03-02 124 views
0

我無法弄清楚如何在運行時移動WPF形狀。具體來說,我想移動一個橢圓。移動WPF形狀

這是我的當前代碼:

private void Tick(object sender, EventArgs e) 
    { 
     Point ballLocation = ball.TransformToAncestor(Application.Current.MainWindow).Transform(new Point(0, 0)); 
     //MessageBox.Show(ballLocation.ToString()); 
     Canvas.SetLeft(ball, ballLocation.X + 5); 

     InvalidateVisual(); 
    } 

每次計時器滴答(1秒)的球應移動在x方向上5個像素,是否正確?如果這是錯誤的,我如何獲取Ellipse的當前位置,以及如何將它設置到新的位置。也許InvalidateVisual存在問題?我相信基本上重新繪製了控制。如果這是錯誤的,我該如何重新繪製橢圓以顯示其位置變化。我也嘗試ball.InvalidateVisual(),它沒有工作。

這是我如何創建和啓動定時器:

var timer = new DispatcherTimer {IsEnabled = true}; 
     timer.Tick += Tick; 
     timer.Interval = new TimeSpan(0, 0, 1); 
     timer.Start(); 
+0

我試過了,它沒有工作。 – tentmaking 2013-03-02 18:55:55

+0

你如何創建和啓動計時器? – Clemens 2013-03-02 19:09:37

+0

我將該代碼添加到帖子 – tentmaking 2013-03-02 19:18:46

回答

0

如果Canvas.Left一些價值被初始化,無論是在XAML

<Ellipse Name="ball" Canvas.Left="0" ... /> 

或代碼

Canvas.SetLeft(ball, 0); 

的以下作品:

void Tick(object sender, EventArgs e) 
{ 
    Canvas.SetLeft(ball, Canvas.GetLeft(ball) + 5); 
} 

初始化是必需的,因爲默認值是Double.NaN


您可以但是考慮到動畫Canvas.Left屬性來獲得平穩的運動。開始閱讀這裏:Animation Overview

+0

這種方法不起作用。我必須在其他地方的代碼中做錯事。 – tentmaking 2013-03-02 19:28:11

+0

您也可以在聲明Ellipse的位置發佈XAML。 – Clemens 2013-03-02 19:40:40