2014-06-05 45 views
0

我有一个ListView,我正在绘制矩形一个在另一个之下,我正在通过增量加载模拟无限滚动的矩形。如何从颜色列表中连续选择颜色?

我想为ListView中的每个矩形设置不同的颜色。

我正在使用绑定转换器实现这一点。

我的问题是,一次选择的颜色不会保持不变。如果向下滚动ListView并向上滚动,某些矩形的颜色会改变!

的XAML:

<ListView ItemSource={Binding items}> 
<ListView.ItemTemplate> 
<DataTemplate> 
<Rectangle Fill="{Binding Converter={StaticResource gridColorConverter}, 
            Mode=OneTime}" /> 
</ListView.ItemTemplate> 
</DataTemplate> 
</ListView> 

C#:

public class GridColorConverter : IValueConverter 
    { 
     public static int SelectedColorIndex = 0; 

     public static SolidColorBrush Pink = new SolidColorBrush(Color.FromArgb(255, 90, 20, 66)); 
     public static SolidColorBrush Purple = new SolidColorBrush(Color.FromArgb(255, 85, 29, 108)); 
     public static SolidColorBrush Green = new SolidColorBrush(Color.FromArgb(255, 39, 121, 85)); 
     public static SolidColorBrush Brown = new SolidColorBrush(Color.FromArgb(255, 109, 26, 21)); 
     public static SolidColorBrush Blue = new SolidColorBrush(Color.FromArgb(255, 30, 89, 105)); 

     public static List<SolidColorBrush> GridColors = new List<SolidColorBrush>() { Pink, Green, Purple, Brown, Blue }; 

     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      if(SelectedColorIndex > (GridColors.Count - 1)) 
      { 
       SelectedColorIndex = 0; 
      } 
      return GridColors[SelectedColorIndex++]; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      return null; 
     } 
    } 
+0

这是...很hacky。为什么不只是将Brush属性添加到作为ListView源的项目中,并将Fill属性绑定到它? – yasen

+0

你在“{绑定项目}”中的项目是什么? – Meneses

+0

items是一个包含从1到10,000的整数的列表 –

回答

0

您需要使用您的产品某些属性的转换器,以确保它总是得到相同的颜色。您可以执行类似return GridColors[value.GetHashCode() % GridColors.Count]的操作,但最好将值转换为其实际视图模型类型,并使用要添加到项目视图模型的增量索引属性以确保邻近项目不会产生相同的颜色。