2014-06-05 70 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]的操作,但最好將值轉換爲其實際視圖模型類型,並使用要添加到項目視圖模型的增量索引屬性以確保鄰近項目不會產生相同的顏色。