关于在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,但我不认为这应该影响动画

关于在WPF的画布中移动形状

而不是强迫你的UI线程睡觉。我建议您使用WPF提供的Storyboard Animation专门用于此目的。如果你有什么新东西,这个链接会让你开始-

http://vbcity.com/blogs/xtab/archive/2009/12/28/wpf-simple-animations-to-move-and-resize-elements-simultaneously.aspx

这不会成功的。首先你有一个线程问题,UI线程上的Sleep()阻塞屏幕更新。使用另一个线程最多只能得到糟糕的结果。

你不需要这个,只需要学习如何在XAML中定义动画(<Storyboard />)。你可以从c#中触发它们。

编辑

试着看看这个小片段:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        label1.Content = "Click";
        Thread.Sleep(2500);
    }