如何设置ListView控件中的列头的颜色!

本文介绍如何通过设置OwnerDraw属性并利用DrawColumnHeader、DrawItem及DrawSubItem事件来自定义ListView的列头、项及其子项的背景色。通过示例代码展示了如何使用这些事件来改变界面元素的显示效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能有很多人感觉ListView默认的列头的背景太单调,缺乏个性,想变的列头的背景色!

实际上可以使用ListViewDrawColumnHeader事件自己画背景色,注意仅当 OwnerDraw 属性设置为 true 且 View 属性设置为 View. Details 时才引发此事件!不多说了,大家看代码,过程很简单:


private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)

{

e.Graphics.FillRectangle(Brushes.Red, e.Bounds); //采用特定颜色绘制标题列,这里我用的红色

e.DrawText(); //采用默认方式绘制标题文本

}

实际上Item和SubItem也可以自己来画外观的,使用DrawItem和DrawSubItem事件就可以了:
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)

{


e.Graphics.FillRectangle(Brushes.Red, e.Bounds); //采用特定颜色绘制标题列,这里我用的红色

e.DrawText(); //采用默认方式绘制标题文本
}
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)

{


e.Graphics.FillRectangle(Brushes.Red, e.Bounds); //采用特定颜色绘制标题列,这里我用的红色

e.DrawText(); //采用默认方式绘制标题文本
}

实际上还可以实现其他的效果,大家可以探索一下!
也希望大家多多指教!


转载于:https://www.cnblogs.com/xuefeng1982/archive/2009/05/22/1486753.html

### C# 中 ListView 控件固定 为了实现在 `ListView` 控件中固定的效果,通常会采用自定义绘制的方式或者利用第三方库来简化这一过程。下面提供一种基于 Windows Forms 的解决方案以及另一种 WPF 下的实现方式。 #### 方案一:Windows Forms 实现固定 对于 Windows Forms 应用程序中的 `ListView` 控件来说,可以通过设置其属性并结合一些事件处理函数达到固定表的目的: ```csharp private void InitializeFixedHeader() { listView.View = View.Details; listView.FullRowSelect = true; // 添加 listView.Columns.Add("ID", 50); listView.Columns.Add("Name", 100); // 设置自动调整大小模式以适应内容或窗口宽度变化 foreach (ColumnHeader column in listView.Columns) column.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize); // 禁止滚动条影响到部区域 listView.Scroll += new EventHandler(ListView_Scroll); } void ListView_Scroll(object sender, EventArgs e) { var lv = sender as ListView; if (lv != null && lv.Items.Count > 0) { Rectangle rect = lv.ClientRectangle; using (Graphics g = lv.CreateGraphics()) { SizeF size = g.MeasureString(lv.Columns[0].Text, SystemFonts.DefaultFont); int topOffset = Math.Max(0, -(int)size.Height); // 调整顶部偏移量 // 绘制背景颜色 using (SolidBrush brush = new SolidBrush(Color.LightGray)) g.FillRectangle(brush, new Rectangle(rect.X, rect.Y + topOffset, rect.Width, (int)size.Height)); // 绘制文本 TextRenderer.DrawText(g, "ID", SystemFonts.DefaultFont, new Point(rect.Left, rect.Top + topOffset), Color.Black); TextRenderer.DrawText(g, "Name", SystemFonts.DefaultFont, new Point(rect.Left + 50, rect.Top + topOffset), Color.Black); } } } ``` 此代码片段展示了如何创建具有固定表效果的 `ListView`[^1]。请注意,在实际项目开发过程中可能还需要考虑更多细节问题,比如多线程访问、性能优化等方面的内容。 #### 方案二:WPF 使用 DataGrid 替代 ListView 并保持默认排序功能 如果是在 WPF 环境下工作,则推荐使用 `DataGrid` 来代替传统的 `ListView`,因为前者内置了更好的支持用于显示表格数据的功能特性,并且更容易配置固定的: ```xml <DataGrid AutoGenerateColumns="False"> <DataGrid.Resources> <!-- 定义样式 --> <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="Background" Value="LightGray"/> <Setter Property="Foreground" Value="Black"/> <Setter Property="HorizontalContentAlignment" Value="Center"/> </Style> </DataGrid.Resources> <DataGrid.Columns> <DataGridTextColumn Header="ID" Binding="{Binding Id}" SortMemberPath="Id"/> <DataGridTextColumn Header="Name" Binding="{Binding Name}" SortMemberPath="Name"/> </DataGrid.Columns> </DataGrid> ``` 上述 XAML 片段说明了怎样通过声明式的语法快速构建带有固定表的数据网格视图[^3]。这里的关键在于正确设置了各上的 `SortMemberPath` 属性以便保留原有的排序能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值