Изменение цвета фона заголовков Winform ListView

Как вы можете изменить цвет фона заголовков ListView?

2 ответов


Это можно сделать, установив для свойства OwnerDraw представления списка значение true.

это позволяет вам предоставлять обработчики событий для событий рисования listview.

есть подробный пример MSDN

Ниже приведен пример кода для установки цвета заголовка в красный:

    private void listView1_DrawColumnHeader(object sender,
                                            DrawListViewColumnHeaderEventArgs e)
    {
        e.Graphics.FillRectangle(Brushes.Red, e.Bounds);
        e.DrawText();
    }

Я думаю (но рад, что оказался неправ) , что с OwnerDraw, установленным в true, вам также нужно будет предоставить обработчики для других событий draw которые имеют реализации по умолчанию, как показано ниже:

    private void listView1_DrawItem(object sender,
                                    DrawListViewItemEventArgs e)
    {
        e.DrawDefault = true;
    }

мне, конечно, не удалось заставить listview рисовать элементы без этого.


Я знаю, что это немного поздно на вечеринку, но я все еще видел этот пост, и это помогло бы мне. Вот немного абстрактное применение кода, предоставленного Дэвидом

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);