文本动画,在c#中创建类似打字的效果

时间:2013-08-27 15:01:23

标签: c# xaml text timer textblock

这是我在MainPage.xaml.cs中创建的文本动画效果:

private readonly double TEXT_TIMER = 30.0;
private int index;

 private void updateText(String text)
    {
        _text = text;
        index = 0;
        MainTextBlock.Text = "";            

        _textTimer.Tick += _textTimer_Tick;
        _textTimer.Interval = TimeSpan.FromMilliseconds(TEXT_TIMER);
        _textTimer.Start();
    }

 private void _textTimer_Tick(object sender, EventArgs e)
    {
        if (index < _text.Length)
        {
            string s = _text[index].ToString();
            MainTextBlock.Text += s;
            index++;
        }
        else
        {
        _textTimer.Stop();
        }
    }

我有一个文本/字符串列表以及一个按钮,在MainPage.xaml上说NextButtonupdateText方法位于NextButton的点击事件中,其作用是从文本/字符串列表中获取文本,并使用动画效果更新文本块。

但我意识到,当我继续点击NextButton时,好像TEXT_TIMER的值正在减少,动画效果发生得更快,直到没有动画(即文本只出现在文本块中而没有任何影响)。

任何人都知道为什么会发生这种情况以及如何解决这个问题?

修改: 我已经包含了代码,以便在文本块更新后停止计时器,希望能够解决可能的多个Tick回调,但仍然没有。

2 个答案:

答案 0 :(得分:0)

TEXT_TIMER值并没有减少,但_textTimer没有停止,所以你有多个计时器滴答。
尝试在_textTimer.Stop()方法的开头添加updateText()

答案 1 :(得分:0)

关于Dan Bryant's建议:

我的程序流多次注册Tick事件,因为我将它放入updateText方法中,该方法在程序运行期间被多次调用。我所要做的就是将Tick事件注册的代码行_textTimer.Tick += _textTimer_Tick;移到构造函数中,即在InitializeComponent()之后解决问题!