移动WPF形状

移动WPF形状,wpf,move,shape,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.ToS

我不知道如何在运行时移动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个像素,对吗?如果这是错误的,我如何获得椭圆的当前位置,以及如何将其设置为新位置。可能是因为无效版本有问题?我认为基本上是重新绘制控件。如果这是错误的,我如何重新绘制椭圆,以显示其位置的变化。我也试过ball.InvalidateVisual(),它不起作用

以下是我创建和启动计时器的方式:

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

如果
Canvas.Left
是用某个值初始化的,则

<Ellipse Name="ball" Canvas.Left="0" ... />
以下工作:

void Tick(object sender, EventArgs e)
{
    Canvas.SetLeft(ball, Canvas.GetLeft(ball) + 5);
}
初始化是必要的,因为默认值是
Double.NaN



你可以考虑激活<代码>画布。左属性以获得平滑的移动。从这里开始阅读:

我已经尝试过了,它不起作用。如何创建和启动计时器?我在帖子中添加了该代码
IsEnabled=true
timer.Start()
调用是多余的,两者都在启动计时器。否则看起来没问题。这种方法不起作用。我在其他地方的代码中肯定有错误。您也可以在声明椭圆的地方发布XAML。
void Tick(object sender, EventArgs e)
{
    Canvas.SetLeft(ball, Canvas.GetLeft(ball) + 5);
}