ListView 更改表头字体颜色

对于强迫症的我来说,ListView控件的表头字体一直是黑色无法更改是一个很蛋疼的问题。在网上查阅了很多资料但是写法都比较繁琐。

于是我直接分析了微软的源码,他是在DrawListViewColumnHeaderEventArgs这个类里面实现的绘制标题。源码如下:

        public void DrawText()
        {
            HorizontalAlignment textAlign = this.header.TextAlign;
            TextFormatFlags flags = (textAlign == HorizontalAlignment.Left) ? TextFormatFlags.Default : ((textAlign == HorizontalAlignment.Center) ? TextFormatFlags.HorizontalCenter : TextFormatFlags.Right);
            flags |= TextFormatFlags.WordEllipsis;
            this.DrawText(flags);
        }
        
        public void DrawText(TextFormatFlags flags)
        {
            string text = this.header.Text;
            int width = TextRenderer.MeasureText(" ", this.font).Width;
            Rectangle bounds = Rectangle.Inflate(this.bounds, -width, 0);
            TextRenderer.DrawText(this.graphics, text, this.font, bounds, this.foreColor, flags);
        }

期初我直接自己new DrawListViewColumnHeaderEventArgs(),把需要更改的值全部传入构造函数。但是问题来了。

他并不能像默认的样式一样左对齐时左边的缩进在6个像素左右。其实也很容易解决就是把-width改为-width/2即可。

于是这一纠结的问题至此全部解决,源码如下:

        protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e)
        {
            e.DrawBackground();

            HorizontalAlignment textAlign = e.Header.TextAlign;
            TextFormatFlags flags = (textAlign == HorizontalAlignment.Left) ? TextFormatFlags.Default : ((textAlign == HorizontalAlignment.Center) ? TextFormatFlags.HorizontalCenter : TextFormatFlags.Right);
            flags |= TextFormatFlags.VerticalCenter;
            string text = e.Header.Text;
            int width = TextRenderer.MeasureText(" ", e.Font).Width;
            Rectangle bounds = Rectangle.Inflate(e.Bounds, -width / 2, 0);
            //这里我设置的标题颜色为红色,若需要更改只需要更改Color.Red即可。
            TextRenderer.DrawText(e.Graphics, text, e.Font, bounds, Color.Red, flags);
        }
        protected override void OnDrawItem(DrawListViewItemEventArgs e)
        {
            e.DrawDefault = true;
        }


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值