Windows Phone中的ListBox交替行背景变得分离

时间:2013-02-02 23:53:21

标签: windows-phone-7 xaml

今天在Windows Phone 7上应用交替行背景颜色时,如果要在ListBox中显示大量项目,行颜色最终会逐渐消失,加倍并跳过渲染。

任何人都遇到此问题,这是Windows Phone中的错误吗?我的代码变得简单得多。我精确地遵循了这篇文章:http://chillijam.co.uk/2012/01/11/alternating-listbox-item-background-colours-in-wp7/

从好开始:

Starting good

滚动条大约6次点击后

enter image description here

正如你所看到的,非常令人震惊,只会变得更糟,更加分离。想法?

1 个答案:

答案 0 :(得分:1)

Windows手机中没有错误,你正试图使用​​的第三方蹩脚代码中的错误。

他们的做法完全错了。没有人保证框架会顺序调用IValueConverter.Convert。正如您所看到的,当向上和向下滚动时,框架会以任意顺序调用IValueConverter.Convert。

它可能仅在列表框不重用其项目时才有效(您可以通过设置列表框'ItemsPanel属性来禁用重用。默认情况下,它使用VirtualizingStackPanel导致您的项目被重用。将其替换为常规StackPanel)。但是:(1)RAM的使用(2)它仍然依赖于未记录的行为,可能很容易因操作系统升级而中断。

有很多正确的方法可以实现你想要的。

你可以,例如为项目类添加背景颜色。

或者,继承自ListBox,重写PrepareContainerForItemOverride方法,在实现中调用ItemContainerGenerator.IndexFromContainer方法获取行索引,并根据需要设置颜色ListBoxItem对象。注意两件事(1)不要忘记调用base.PrepareContainerForItemOverride(2)您对ListBoxItem属性的更改可能会被项目容器模板中的可视状态管理器覆盖。