如何更改listView ColumnHeader文本颜色?

时间:2017-02-11 20:27:39

标签: c# .net winforms

在form1构造函数

listView1.Scrollable = true;
            listView1.View = View.Details;
            ColumnHeader header = new ColumnHeader();

            header.Text = "Files are ready";
            header.Name = "col1";
            listView1.Columns.Add(header);
            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);

我想将“文件准备就绪”的颜色更改为红色。 所以我尝试了这个事件:

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
        {
            using (var sf = new StringFormat())
            {
                sf.Alignment = StringAlignment.Center;

                using (var headerFont = new Font("Microsoft Sans Serif", 9, FontStyle.Bold))
                {
                    e.Graphics.FillRectangle(Brushes.Pink, e.Bounds);
                    e.Graphics.DrawString(e.Header.Text, headerFont,
                        Brushes.Black, e.Bounds, sf);
                }
            }
        }

试图将两个画笔改为红色,但它没有改变任何东西。

1 个答案:

答案 0 :(得分:1)

您可能错过了将listView1的{​​{3}}属性设置为true

此属性表示您希望使用自己的代码而不是原始ListView方法绘制ListView的部分内容。如果没有DrawColumnHeaderDrawItemDrawSubItemListView等事件将不会被e.DrawDefault引发。

对于您不想自己绘制的列,请将true设置为e.DrawBackground()。如果您只想更改文本颜色,请使用private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) { if (e.ColumnIndex != myColumnIndex) { e.DrawDefault = true; // tell the ListView to draw this header return; } e.DrawBackground(); // draw your text as you did in your code // except the FillRectangle since the background is // now already drawn } 绘制标题的背景:

listView1.OwnerDraw

但如果您将true设置为ListView,则DrawItem会询问您所有内容:标题,项目和子项目。因此,您还需要订阅DrawSubItemListView个事件,并明确告诉listView1.DrawItem += (sender, e) => { e.DrawDefault = true; }; listView1.DrawSubItem += (sender, e) => { e.DrawDefault = true; }; 您希望它自己绘制这些内容:

A //branch 1
 \
  B - C //branch 2
       \
        D //branch 3