2010-10-25 22 views
5

¿Cómo puedo hacer para que el color de fondo de un control ListViews para los artículos varíe de un elemento a otro como en WinAmp, junto con cambiar los colores del encabezado de columna?Color de fondo de elemento de ListViews variable

http://i.stack.imgur.com/30pQy.png

Si se mira de cerca se puede ver el primer elemento es un gris oscuro y el segundo es de color negro y así sucesivamente.

Respuesta

9

Puede establecer la propiedad ListViewItem.BackColor, sin embargo, esto tiene que hacerse manualmente para cada línea alterna. Alternativamente, puede usar un DataGridView que tiene una propiedad AlternateRowStyle que lo haría automáticamente, aunque necesitará enlazar sus filas en una colección de clases, que es un tema totalmente distinto.

Para el caso simple:

foreach (ListViewItem item in listView1.Items) 
{ 
    item.BackColor = item.Index % 2 == 0 ? Color.Red : Color.Black; 
} 
+1

Qué debemos hacer si queremos pintar una vista de lista vacía – SurajSing

0

lo tomo que agrega filas (Subelementos) en un bucle? Si es así, utiliza un contador de bucles para averiguar qué color quieres.

string[] strings = new string[]{"dild", "dingo"}; 
int i = 0; 
foreach (var item in strings) 
{ 
    Color color = i++ % 2 == 0 ? Color.LightBlue : Color.LightCyan; 
    ListViewItem lv = listView1.Items.Add(item); 
    lv.SubItems[0].BackColor = color; 
} 
0
for (int index = 0; index <= ListView1.Items.Count; index++) 
{ 
    if (index % 2 == 0) 
    { 
     ListView1.Items(index).BackColor = Color.LightGray; 
    } 

} 
+0

En su código, primero todos los artículos se pintarán en un solo color, después de eso, se volverán a pintar 1/2 de ellos. Eso no es muy eficiente, supongo. Por lo tanto, es mejor pintarlos en agregar, es decir, solo una vez. – abatishchev

+0

¡Sí! Estoy de acuerdo ... Es solo que no puedo encontrar un evento para agregar artículo en el ListView ... Los eventos Paint de artículo y Sub Item Paint no parecen disparar .... –

0
private static void RepaintListView(ListView lw) 
{ 
    var colored = false; 
    foreach (ListViewItem item in lw.Items) 
    { 
     item.BackColor = colored ? Color.LightBlue : Color.White; 
     colored = !colored; 
    } 
} 

Puede llamar a este método después de la adición artículo. O úselo directamente en agregar

1

Maneje el evento DrawItem en el cuadro de lista y configure DrawMode en OwnerDrawVariable. El DrawItemEventArgs proporciona una propiedad BackColor que se puede establecer en función del índice (también en el arg).