c# - WPF - 根据时间动画进度条

标签 c# wpf c#-4.0

我希望制作一个进度动画,以便完成一个周期需要 1 分钟。我的代码是:

ProgressBar _progressSec = new ProgressBar();
_progressSec.Name = "_progressSec";
_progressSec.Minimum = 0;
_progressSec.Maximum = 60;
_progressSec.Value = DateTime.Now.Second;
this.RegisterName(_progressSec.Name, _progressSec);

NewGrid.Children.Add(_progressSec);

Storyboard newStory = new Storyboard();
DoubleAnimation newAnimation = new DoubleAnimation();
newAnimation.To = 60;
newAnimation.BeginTime = new TimeSpan(DateTime.Now.Second);
newAnimation.RepeatBehavior = RepeatBehavior.Forever;
newAnimation.Duration = new Duration(TimeSpan.FromMinutes(1));
newStory.Children.Add(newAnimation);

Storyboard.SetTarget(newAnimation, _progressSec);
Storyboard.SetTargetProperty(newAnimation, new PropertyPath(ProgressBar.ValueProperty));

newStory.Begin();

这个小节刚好需要 1 分钟来完成一个循环,这不是我想要的。因此,如果我从 40 秒开始,它需要一分钟才能达到 60 秒。

我想要它做的是从当前的秒值开始,每秒递增,当它达到 60 秒时,重新开始,所以如果它从 40 秒开始,则需要 20 秒才能达到一分钟。 当它到达一分钟时,我希望它重新开始(从 0 开始)。当然,我可以说我正在开发一个时钟/计时器,但我想我最好解释一下我运行代码时发生了什么。

当我将 From 值添加到 newAnimation 时,它始终从该值开始,而不是从 BeginTime 值开始。

有什么想法吗?

谢谢。

最佳答案

好吧,如果你想让你的动画持续一分钟以外的时间,你必须这样告诉它:

int from = 50;
int to = 60;
newAnimation.From = from;
newAnimation.To = to;
newAnimation.Duration = new Duration(TimeSpan.FromSeconds(to - from));

关于c# - WPF - 根据时间动画进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5779038/

相关文章:

c# - ORA-06550 : line 1, 第 7 列:PLS-00306:参数的数量或类型错误

c# - 为什么不能将 Array.Length 和 Array.Count() 分配给 const 值?

.net - 错误模板绑定(bind)错误wpf

c#-4.0 - 如何摆脱 "windows can' t验证此驱动程序软件的发布者”窗口?

c# - 如何在没有内存问题的情况下加载/操作大图像?

asp.net-mvc - 无法获取局部 View cshtml 的 ViewModel

c# - 如何从同一对象的构造函数中调用不同的构造函数?

C# 解析值如果不为空

c# - WPF Caliburn MEF 应用程序和 DI

c# - 如果数据库中的值发生变化,如何持续更新该值