2011-05-08 84 views
2

好吧,所以我发现了一些相当奇怪的行为,同时搞乱了WPF ProgressBar控件。此控件位于ListView控件的列中,其实质与this question & answer几乎没有什么不同。WPF ProgressBar在更新速度过快时会失去光泽 - bug?

我由几个属性(MinMaxValue),所有单向绑定明显的手段结合Progressbar一类。此另一个类是从另一个线程更新的,并定期使用接口让ProgressBar知道状态正在进行。这一切都很好!

但这里是奇怪的地方。我的ProgressBar失去光芒......直到达到Max(= 100%)的价值。然后它突然开始在绿色酒吧里闪烁着白色的光芒,这非常烦人。我有一个理由表现出进步,而一旦你开始注意到它不在那里,缺乏脉搏实际上很让人分心。

因此,我启动了调试。我发现Thread.Sleep(1000)在我的线程处理中,它仍然隐藏着光芒,但是如果我将它撞到Thread.Sleep(1500),那么辉煌就会随时回到疯狂的活力。之后,我尝试将我的进度单位转换为较小的数字,因此整数值需要更长的时间才能更改。 Min 0,Max 100仍然缺乏光芒。最低0分,最高10分的辉光以充满活力回归。在所有情况下,花费达到100%的工作量和时间是相同的,但对于辉光显示来说,这是一个非常明显的二元化YES/NO效果。我没有测试过的唯一的事情是,当ProgressBar没有放在这个ListView控件中时它是否也会发生。

我对自己非常了解,无法理解ProgressBar控件所涉及的(XAML)的深层WPF内部。所以我希望这里的任何人都知道这是一个已知的bug,他们偶然发现的东西,或者他们甚至可能知道如何解决/修复的东西。

我的机器运行Windows 7,并且我正在VS2010中开发针对.NET Framework 4 Client Profile。

回答

0

我会猜测,并说你失去了辉光,因为你正在更新你的进度条经常。 每当你设置一个新的值时,进度条重新开始发光的动画(我想 - 我还没有测试过这个,我正在试着去掉头顶)。

看来你也许已经想到了同样的事情,并试图解决它,但我不知道你已经完全用尽了所有的可能性:

  1. 尝试创建一个检查,如果(进度。值== newValue)不要做progressbar.Value = newValue;
  2. 进度条应该使用小数,最大值,小数值。确保你没有更新每个小数点,例如。 - 10,1; 10,2; 10,3;等等...(使用progressbar.Value =(int)newValue;)
  3. 尝试以更大的增量设置进度条值,而不是increment = 1,使用increment = 10;
  4. 你可以尝试在ListView之外进度条,也许会有一个进度条在里面的渲染错误。

PS!如果您非常快速地更新进度条,则发光动画无法运行。请记住,辉光分辨的目的仅在于显示应用程序仍在运行(机器尚未冻结),尽管进度(条)未移动。
如果进展很快,那么对于用户来说这是一种视觉效果,所以没有必要在那个时候有发光动画......