WinForms ListView Group如何自定义颜色与字体大小
WinForms ListView 分组头自定义字体大小/颜色解决方案
WinForms 内置的 ListView 控件默认调用系统原生接口绘制分组头,不会继承 ListView 本身设置的 Font、ForeColor 等属性,需要通过开启自定义绘制的方式手动调整分组头样式。
实现步骤
第一步:开启 ListView 自定义绘制配置
在窗体构造函数或者设计器中给目标 ListView 设置以下属性:MyListView.OwnerDraw = true; // 开启自定义绘制 MyListView.ShowGroups = true; // 确保分组显示开启同时绑定对应的绘制事件,不需要自定义的内容直接用默认渲染逻辑即可:
// 列头、普通行、子项沿用默认绘制 MyListView.DrawColumnHeader += (s, e) => e.DrawDefault = true; MyListView.DrawItem += (s, e) => e.DrawDefault = true; MyListView.DrawSubItem += (s, e) => e.DrawDefault = true; // 仅自定义分组头绘制 MyListView.DrawGroup += MyListView_DrawGroup;第二步:编写分组头绘制逻辑
在DrawGroup事件中可以完全自定义分组头的字体、颜色、间距等样式,示例代码如下:private void MyListView_DrawGroup(object sender, DrawListViewGroupEventArgs e) { // 绘制默认背景 e.DrawBackground(); // 自定义标题样式:这里示例是在ListView原有字体基础上放大2号、加粗,颜色设为深蓝色 using var titleFont = new Font(MyListView.Font.FontFamily, MyListView.Font.Size + 2, FontStyle.Bold); e.Graphics.DrawString(e.Group.Header, titleFont, Brushes.DarkBlue, e.Bounds.Left + 4, e.Bounds.Top + 2); // 若使用了Subtitle属性(仅.NET 5+及Win10以上系统支持),单独绘制副标题 if (!string.IsNullOrEmpty(e.Group.Subtitle)) { using var subtitleFont = new Font(MyListView.Font.FontFamily, MyListView.Font.Size - 1, FontStyle.Regular); e.Graphics.DrawString(e.Group.Subtitle, subtitleFont, Brushes.Gray, e.Bounds.Left + 4, e.Bounds.Top + titleFont.Height + 2); } // 绘制默认的展开/折叠标识 e.DrawFooter(); }
常见调整说明
- 如果需要固定分组头高度,.NET 5+ 可以直接设置
ListViewGroup.HeaderHeight属性,旧版本.NET Framework 可以通过向ListView发送LVM_SETGROUPINFO消息实现高度调整。 - 颜色可以根据需求替换为自定义的
SolidBrush实例,注意手动释放资源或者用系统自带的Brush对象避免内存泄漏。
你提到的效果参考:
你使用的基础分组创建代码无需修改即可适配上述逻辑:
MyListView.BeginUpdate(); MyListView.Items.Clear(); var lg = new ListViewGroup("Group Test"); lg.Subtitle = "Does this work?"; MyListView.Groups.Add(lg);
内容的提问来源于stack exchange,提问作者Damn Vegetables
相关产品推荐
相关产品推荐

