2010-05-19 144 views
3

使用C#Winforms(3.5)。Winforms - 如何在ListView控件中交替行的顏色?

是否可以將行顏色設置爲在列表視圖中自動替換?

或者我需要手動設置行顏色每次新行添加到列表視圖?

基於一個MSDN文章手動的方法是這樣的:

//alternate row color 
if (i % 2 == 0) 
{ 
    lvi.BackColor = Color.LightBlue; 
} 
else 
{ 
    lvi.BackColor = Color.Beige; 
} 
+1

另外,根據這份A List Apart的文章,斑馬條紋可能會讓您的桌子更容易閱讀。 http://www.alistapart.com/articles/zebrastripingdoesithelp/ – Timothy 2010-05-19 15:16:02

+0

+1 - 偉大的文章@蒂莫西。我會去斑馬條紋。 – 2010-05-19 17:33:37

回答

5

恐怕是的WinForms的唯一途徑。 XAML允許通過使用樣式。

+0

感謝您的反饋@Andre。 – 2010-05-19 17:34:03

0

據我所知WPF允許在任何控件上設置樣式使用<Styles/> 但是在winforms中恐怕可能是唯一的方法。

0

您還可以利用所有者繪圖,而不是明確設置屬性。所有者繪圖不易受項目重新排序的影響。

這裏是如何做到這一點的Better ListView(第三方組件,提供免費和擴展版本) - 它的問題僅僅處理一個DrawItemBackground事件:

private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs) 
{ 
    if ((eventArgs.Item.Index & 1) == 1) 
    { 
     eventArgs.Graphics.FillRectangle(Brushes.AliceBlue, eventArgs.ItemBounds.BoundsOuter); 
    } 
} 

結果:

enter image description here

0

將ListView OwnerDraw屬性設置爲true,然後實現DrawItem處理程序:

private void listView_DrawItem(object sender, DrawListViewItemEventArgs e) 
    { 
     e.DrawDefault = true; 
     if ((e.ItemIndex%2) == 1) 
     { 
      e.Item.BackColor = Color.FromArgb(230, 230, 255); 
      e.Item.UseItemStyleForSubItems = true; 
     } 
    } 

這個例子很簡單,你可以改進它。

0
 for (int i = 0; i <= listView.Items.Count - 1; i = (i + 2)) 
     { 
      listView.Items[i].BackColor = Color.Gainsboro; 
     } 

設置在屬性菜單的主要背景,然後使用這個代碼來設置替代顏色。