我是C#和WPF的新手。我想做以下事情:
在5秒后一个接一个地显示几个标签,
完成上述操作后,我必须在画布上移动一个形状大约十次,每次移动之间的间隔为5秒,
执行上述操作,但时间间隔仅为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();
}
}
但上面的问题是:
计时器和计时器2同时启动。
标签不会一个接一个地显示 - 测试出现,5秒后再见,你好,永远不会出现!!
有没有办法重置定时器并像上面提到的Shapemove或startDisplay函数一样重复调用它们?
请帮我解决上述问题。
答案 0 :(得分:1)
不要使用计时器。请改用StoryBoards。
在故事板中,您可以安排操纵Visibility,Opacity,Location,...控件的任何(依赖)属性的动画。