ListView 更改表头字体颜色
2017-12-17 15:03
465 查看
对于强迫症的我来说,ListView控件的表头字体一直是黑色无法更改是一个很蛋疼的问题。在网上查阅了很多资料但是写法都比较繁琐。
于是我直接分析了微软的源码,他是在DrawListViewColumnHeaderEventArgs这个类里面实现的绘制标题。源码如下:
期初我直接自己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;
}
于是我直接分析了微软的源码,他是在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;
}
相关文章推荐
- 更改ListView字体颜色
- Android ListView 如何更改字体颜色,字体类型等参数
- Android ListView 如何 更改字体颜色,字体类型等参数
- Android ListView 如何更改字体颜色,字体类型等参数
- Visual Studio 更改字体大小显示行号和更改主题(背景)颜色
- android 更改TextView中任意位置字体大小和颜色
- 更改ios顶部状态栏字体颜色
- VB学习要点3----本窗体下Format函数下的操作(包括本窗体下的字体,颜色,大小的更改)
- mfc更改状态栏的字体颜色
- gvim 高亮关键字 开关行号和自动缩进,更改字体,更改行号颜色和背景颜色
- AlertDialog更改标题颜色,字体等
- 为pyqt中的listview添加格式字体颜色
- listview中,点选item时,更改item背景图片以及item字体
- listview选中时如何修改textview字体的颜色
- 如何更改Eclipse的字体和背景颜色
- Python笔记——PyCharm V2017 1.5 更改背景颜色、菜单栏字体和大小、代码部分字体大小
- myeclipse如何更改字体颜色以及背景色
- 系统状态栏字体颜色更改
- listview、GridView单点击效果,点击改变背景改变item字体颜色实现
- IOS9 更改状态栏字体颜色为白色