2012-05-10 73 views
0

我想給在列表框中交替行樣式窗口電話7交替行的背景顏色列表框行7

我用下面的:它的工作,如果我有幾行。

<ListBox x:Name="ListBox1" Width="500" Height="300"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <StackPanel Width="500" Background="{Binding age,Converter={StaticResource myconverter}}"> 
           <TextBlock Text="Some text"></TextBlock> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 

,這是我的轉換器,其改變所述背景色:

public class MyConverter : IValueConverter 
    { 
     bool flag = false; 
     SolidColorBrush brush1 = new SolidColorBrush(Color.FromArgb(255, 100, 200, 255)); 
     SolidColorBrush brush2 = new SolidColorBrush(Color.FromArgb(255, 200, 100, 155)); 
     public object Convert(object value, 
           Type targetType, 
           object parameter, 
           System.Globalization.CultureInfo culture) 
     { 

      flag = !flag; 
      return flag ? brush1 : brush2; 

     } 

     public object ConvertBack(object value, 
            Type targetType, 
            object parameter, 
            System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

結合它給備用行背景顏色到我的列表框後。 但是,如果列表框有太多的行,當我向上和向下滾動非常快,然後行顏色改變,因爲它是在滾動列表框時再次調用轉換器。

我該如何解決這個問題,請幫幫我嗎?

回答

3

你會看到這種行爲,因爲它取決於轉換器被調用的項目的順序。當您滾動虛擬列表時,不能保證是連續的。

您需要根據項目中的內容執行顏色選擇。

您可以直接向該項目添加背景屬性,也可以將選擇基於每個項目的屬性。例如,如果列表中的每個項目都有順序索引,則可以根據索引是奇數還是偶數來更改轉換器以選擇顏色。

+0

請添加一些示例代碼到您的答案... –

+1

@ Cabuxa.Mapache請參閱http://blog.mrlacey.co.uk/2014/01/how-not-to-highlight-alternate-items-in。 HTML –

0

我有一個非常類似的問題,並最終添加到列表框中顯示的具有顏色/不透明度的ViewModel項目上的新屬性。不是很好,因爲無論何時添加到列表中,都需要重新計算它。

0

爲什麼不將listbox數據模板的stackpanel背景與視圖模型中的SolidColorBrush對象綁定。並且ObservalCollection的項目索引是奇數還是偶數,數據模板可以有自己的顏色。