0

It seems when applying alternating row background colours today on Windows Phone 7, if you have a large set of items to be displayed in the ListBox, the row colours eventually drift out, double up and skip rendering.

Anyone had problems with this, is this a bug in Windows Phone? My code can't get much simpler. I followed this article precisely: http://chillijam.co.uk/2012/01/11/alternating-listbox-item-background-colours-in-wp7/

Starting off well:

Starting good

After about 6 flicks of the scrollbar:

enter image description here

As you can see, pretty shocking, and it only gets worse and more separated. Thoughts?

4

1 回答 1

1

windows phone 中没有错误,您尝试使用的蹩脚的 3-rd 方代码中没有错误。

他们的做法是完全错误的。没有人保证框架会按顺序调用 IValueConverter.Convert。如您所见,当上下滚动时,框架确实以任意顺序调用 IValueConverter.Convert。

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

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

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

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

于 2013-02-03T13:31:30.500 回答