【问题标题】:Alternate row colour WP7交替行颜色 WP7
【发布时间】:2012-07-17 09:52:45
【问题描述】:

我想在我的 MVVM Light WP7 项目中交替使用列表框的背景颜色。

WP7 不支持改变 ListBox 项目背景的背景颜色。

我有一个列表框,它的 itemsource 设置为 CollectionViewSource。 CollectionViewSource 又绑定到我的 ViewModel 中的 ObservableCollection。 CollectionViewSource 配置为按我的自定义对象中的日期时间属性对列表进行排序。

当列表滚动到底部时,会向视图模型发送一条命令,以将更多数据添加到我的集合中。由于 CollectionViewSource 按日期时间排序,因此项目可以出现在列表中的任何位置,而不仅仅是在末尾。

这使得像 http://chillijam.co.uk/2012/01/11/alternating-listbox-item-background-colours-in-wp7/How to apply alternate row style in listbox in window phone 7 这样的方法不起作用。因为他们只检查之前添加的项目。

我还订阅了 ListView UpdateLayout 事件,并在那里遍历 ListBox 中的每个元素并交替背景,但这会触发很多次并且使应用程序真的没有响应。

有人有想法吗?

【问题讨论】:

  • 此解决方案在第一次加载数据时运行良好。但是当我将项目添加到列表中时,列表会重新排序,但是交替的颜色会出错。
  • 我看到了一条说明,这就是为什么我将链接作为评论发布的原因。
  • 是的,该解决方案是我尝试的第一个解决方案。但是我的问题仍然没有答案。在这种情况下,所引用的帖子不起作用。

标签: silverlight windows-phone-7 mvvm listbox listboxitem


【解决方案1】:

您可以尝试按行数访问行并为其添加颜色。

if( row.id % 2 ==0)
//first color
else 
//second color

编辑: 当它被选中时,我用它来修改列表框行背景

     ListBoxItem lbiSelected = (ListBoxItem)(CalcultionList.ItemContainerGenerator.ContainerFromIndex(selectedItemIndex));
     //CalculationList is the name of my listbox
     lbiSelected.Background = new SolidColorBrush(Colors.Red);

【讨论】:

  • 我是为 UpdateLayout 事件做的,但正如我所说,这不是一个好的解决方案,因为它在我每次滚动时都会触发。添加新项目时,我应该订阅什么事件来更新视图?
  • 或者我在哪里可以访问row.id?据我所知,我无法在 DataTemplate 的上下文中访问它。
  • 您可以在初始化 listBox 时添加它,并且在添加行时检查它的 id 并设置颜色。
  • 我正在使用原始帖子中所述的 Mvvm light,我自己没有添加这些项目。我的数据绑定为我完成了这项工作。
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 2011-01-28
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多