1

我是 C# 和 WPF 的新手。我想做以下事情:

  1. 在 5 秒后一个接一个地显示几个标签,

  2. 完成上述操作后,我必须在画布上移动一个形状大约十次,每次移动之间的时间间隔为 5 秒,

  3. 执行上述操作,但时间间隔仅为 2 秒。

这是代码:

    DispatcherTimer timer2 = new DispatcherTimer();
    float timerTime = 10;
    Label timerlabel = new Label();

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        lbl.Content = "test";
        startDisplay("hello!!");
        startDisplay("bye");
        Shapemove(1);
    }

    private void startDisplay(string st)
    {
        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(5);
        timer.Start();
        timer.Tick += (s, e) =>
        {
            lbl.Content = st;
        };
    }

    private void Shapemove(int i)
    {

        timer2.Interval = new TimeSpan(0, 0, 2);
        timer2.Tick += new EventHandler(timer2_Tick);
        timer2.Start();

    }

    void timer2_Tick(object sender, EventArgs e)
    {
        Random rand = new Random();

        if (timerTime > 0)
        {
            canvas1.Children.Remove(timerlabel);
            timerTime--;

            canvas1.Children.Add(timerlabel);
            timerlabel.FontSize = 20;
            timerlabel.Content = timerTime + "s";
            Canvas.SetLeft(rectangle1, rand.Next(640));
            Canvas.SetTop(rectangle1, rand.Next(480));
        }
        else
        {
            timer2.Stop();
        }
    }

但上面的问题是:

  1. 定时器和定时器 2 同时启动。

  2. 标签没有一个接一个地显示 - test 出现了,5 秒后 bye 出现了,hello 从来没有出现过!!

  3. 有没有办法像上面提到的 Shapemove 或 startDisplay 函数一样重置计时器并将它们作为函数重复调用?

请帮我解决上述问题。

4

1 回答 1

1

不要使用计时器。请改用 StoryBoard。

在情节提要中,您可以安排操纵控件的可见性、不透明度、位置...任何(依赖)属性的动画。

请参阅本教程中的动画

于 2012-05-23T06:50:12.200 回答