Как вы можете изменить цвет фона заголовков ListView?
Изменить цвет фона заголовков Winform ListView
Ответы (2)
Это можно сделать, задав для свойства OwnerDraw представления списка значение true.
Затем это позволяет вам предоставлять обработчики событий для событий рисования списка.
Подробный пример есть в MSDN.
Ниже приведен пример кода для установки красного цвета заголовка:
private void listView1_DrawColumnHeader(object sender,
DrawListViewColumnHeaderEventArgs e)
{
e.Graphics.FillRectangle(Brushes.Red, e.Bounds);
e.DrawText();
}
Я думаю (но рад, что оказался неправ), что с OwnerDraw, установленным в true, вам также нужно будет предоставить обработчики для других событий рисования, которые имеют реализации по умолчанию, как показано ниже:
private void listView1_DrawItem(object sender,
DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}
Мне, конечно, не удалось заставить список рисовать элементы без этого.
Я знаю, что это немного поздно для вечеринки, но я все еще видел этот пост, и это помогло бы мне. Вот небольшое абстрактное приложение кода, предоставленного Дэвидом
using System.Windows.Forms;
using System.Drawing;
//List view header formatters
public static void colorListViewHeader(ref ListView list, Color backColor, Color foreColor)
{
list.OwnerDraw = true;
list.DrawColumnHeader +=
new DrawListViewColumnHeaderEventHandler
(
(sender, e) => headerDraw(sender, e, backColor, foreColor)
);
list.DrawItem += new DrawListViewItemEventHandler(bodyDraw);
}
private static void headerDraw(object sender, DrawListViewColumnHeaderEventArgs e, Color backColor, Color foreColor)
{
using (SolidBrush backBrush = new SolidBrush(backColor))
{
e.Graphics.FillRectangle(backBrush, e.Bounds);
}
using (SolidBrush foreBrush = new SolidBrush(foreColor))
{
e.Graphics.DrawString(e.Header.Text, e.Font, foreBrush, e.Bounds);
}
}
private static void bodyDraw(object sender, DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}
Затем вызовите это в конструкторе формы
public Form()
{
InitializeComponent();
*CLASS NAME*.colorListViewHeader(ref myListView, *SOME COLOR*, *SOME COLOR*);
}
Просто замените *ИМЯ КЛАССА* на любой класс, в который вы поместили первый бит кода, а *НЕКОТОРЫЕ ЦВЕТА* на какой-то цвет.
//Some examples:
Color.white
SystemColors.ActiveCaption
Color.FromArgb(0, 102, 255, 102);