重置倒计时动画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秒内停止并重新开始?谢谢
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,并在其中执行任何其他操作。。。