关于在WPF的画布中移动形状
本文关键字:布中 移动 WPF | 更新日期: 2023-09-27 18:11:29
我有一个想要移动的矩形,使用Canvas.SetLeft(rect, x);
但是我想让它看起来像一个平滑的过渡(动画)。下面是应该这样做的代码片段:
void animate()
{
for (int a = 0; a < 10; a++)
{
MainWindow.current.Dispatcher.BeginInvoke(new Action(move));
x += 10;
Thread.Sleep(100);
}
}
void move()
{
Canvas.SetLeft(rect, x);
}
看起来很基本,但是我做起来有困难。我想让线程睡一会儿,&然后将矩形的x设置为一个新值。但是,线程休眠30*10
毫秒,然后矩形立即移动10*10个单位。我不能得到我想要的动画效果。我知道我在GUI线程中调用了Sleep
,但我不认为这应该影响动画
而不是强迫你的UI线程睡觉。我建议您使用WPF提供的Storyboard Animation
专门用于此目的。如果你有什么新东西,这个链接会让你开始-
这不会成功的。首先你有一个线程问题,UI线程上的Sleep()阻塞屏幕更新。使用另一个线程最多只能得到糟糕的结果。
你不需要这个,只需要学习如何在XAML中定义动画(<Storyboard />
)。你可以从c#中触发它们。
编辑
试着看看这个小片段:
private void button1_Click(object sender, RoutedEventArgs e)
{
label1.Content = "Click";
Thread.Sleep(2500);
}