重置倒计时动画c#WPF

本文关键字:c#WPF 动画 倒计时 | 更新日期: 2023-09-27 18:20:37

这是我的动画倒计时代码。当bandera_countdown==false时,计时器应该停止并重置。它会重置,但仍在后台工作,因为即使在重置后,countdownStoryboard.Completed+=CountdownTimer_Completed也会触发。

private void StartCountdown(FrameworkElement target)
    {
        var countdownAnimation = new StringAnimationUsingKeyFrames();
        var countdownStoryboard = new Storyboard();
        if (bandera_countdown == true)
        {
            for (var i = 10; i > 0; i--)
            {
                var keyTime = TimeSpan.FromSeconds(10 - i);
                var frame = new DiscreteStringKeyFrame(i.ToString(), KeyTime.FromTimeSpan(keyTime));
                countdownAnimation.KeyFrames.Add(frame);
            }
            countdownAnimation.KeyFrames.Add(new DiscreteStringKeyFrame(" ", KeyTime.FromTimeSpan(TimeSpan.FromSeconds(11))));
            Storyboard.SetTargetName(countdownAnimation, target.Name);
            Storyboard.SetTargetProperty(countdownAnimation, new PropertyPath(TextBlock.TextProperty));
            countdownStoryboard.Children.Add(countdownAnimation);
            countdownStoryboard.Completed += CountdownTimer_Completed;
            countdownStoryboard.Begin(this);
        }
        else
        {
            countdownStoryboard.Stop();
            countdownStoryboard.Remove();
        }
    }

我该怎么做才能让我的计时器在10秒内停止并重新开始?谢谢

重置倒计时动画c#WPF

bandera_countdown在任何地方都设置为false吗?

可能在for循环中有一个if语句,所以如果i==1,(如果需要,如果i==0),那么将bandera_countdown设置为false。

您也可以尝试更改启动for循环的行上的条件,因此在它说i>0的地方,您可以尝试将其更改为i>=0,因此即使在i==0的时候也应该运行。

我想我理解你想让它做什么,我的意思是从for循环中,我假设keyTime是从0到10,但它似乎不会回到10?这可能是由于我之前提到的i>0的情况,因为我认为for循环的最后一次迭代将是在i==1的时候。

我希望这会有所帮助,如果运气不好的话……别担心,你肯定会很快得到另一个回应,这里的人通常都很有帮助……:)

我的另一个想法是,你可以在for循环之外声明keyTime可变,并给它初始值10,基本上做与for循环中发生的相同的事情,即每次将它的值减少i,然后当i==0时,可能在for循环中有一个if语句,将keyTime的值重置为10,将bandera_countdown设置为false,并在其中执行任何其他操作。。。