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