好的,所以我在弄乱WPF ProgressBar控件时发现了一些相当奇怪的行为。此控件位于ListView控件的列中,一般情况与this question & answer的本质差别很小。
我通过几个属性(Progressbar
,Min
,Max
)将Value
绑定到一个类,显然所有的OneWay绑定。另一个类从另一个线程更新,并定期使用INotifyPropertyChanged
接口让ProgressBar知道状态正在进行。这一切都很棒!
但这是奇怪的地方。我的ProgressBar失去了它的光芒......直到达到Max
(= 100%)值。然后它突然开始在绿色条上发出白色发光的东西,这非常令人讨厌。我有理由表现出进步,一旦你开始注意到它不在那里,缺乏脉冲实际上是非常分散注意力。
因此,我开始调试。我发现在我的线程处理Thread.Sleep(1000)
时,它仍然隐藏了光芒,但是如果我将它碰到Thread.Sleep(1500)
,那么光线会随时以强烈的活力回复。之后,我尝试将我的进度单位转换为较小的数字,因此整数值需要更长的时间才能更改。最小0,最大100仍然没有发光。最小0,最大10点的光芒充满活力。在所有情况下,达到100%所花费的工作量和时间相同,但是对于发光显示,这是一个非常明显的二元YES / NO效果。我没有测试的唯一一件事是当ProgressBar没有放在这个ListView控件中时是否也会发生这种情况。
我非常了解自己无法理解(参与XBL)ProgressBar控件的深层WPF内部。所以我希望这里有人知道这是一个已知的bug,他们偶然发现了什么,或者他们甚至可能知道如何解决/修复。
我的机器运行Windows 7,我正在VS2010中开发针对.NET Framework 4 Client Profile。
答案 0 :(得分:0)
我会猜测并说你失去了光芒,因为你经常更新你的进度条。 每次设置新值时,进度条都会重新启动其发光动画(我想 - 我还没有测试过这个,我正在写下我的头脑)。
似乎你可能已经想到了同样的事情,并试图解决它,但我不确定你已经完全用尽所有可能性:
PS!如果您非常快速地更新进度条,则可以不运行辉光动画。请记住,辉光动画的目的只是为了表明应用程序仍在运行(机器没有冻结),尽管进度(条形)没有移动。
如果进度快速移动,那么它本身就是对用户的视觉效果,因此当时不需要有辉光动画......