移动WPF形状

时间:2013-03-02 18:49:00

标签: wpf move shape

我无法弄清楚如何在运行时移动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();

1 个答案:

答案 0 :(得分: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