我正在尝试增加 ListView 的标题行列的填充或高度。我已经设法使用此代码更改背景颜色和文本颜色。
SelsList.DrawColumnHeader += (sender, e) =>
{
using (SolidBrush brush = new SolidBrush(Color.FromArgb(64, 64, 122)))
{
e.Graphics.FillRectangle(brush, e.Bounds);
}
e.Graphics.DrawString(e.Header.Text, e.Font, Brushes.White, e.Bounds);
e.DrawDefault = false;
};
*SelsList 是我的 ListView
我使用此代码来增加标题行列的填充和高度。但没有成功。 还有其他方法可以实现吗?
SelsList.DrawColumnHeader += (sender, e) =>
{
using (SolidBrush brush = new SolidBrush(Color.FromArgb(64, 64, 122)))
{
e.Graphics.FillRectangle(brush, e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, 50);
}
using (StringFormat format = new StringFormat())
{
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(e.Header.Text, e.Font, Brushes.White, e.Bounds, format);
}
e.DrawDefault = false;
};
为了让 SelsList.DrawColumnHeader 运行,您必须事先进行以下两项设置:
SalesList.OwnerDraw = true;
SalesList.View = View.Details;
以下链接解释更多:
如果您想通过创建一个继承自 ListView 的类来实现此目的(我不推荐这样做),请查看下面的链接:
还可以通过设置图像列表来更改数据行的高度而不是标题的高度,这在以下链接中进行了解释:
但我用更简单的方法做到了。
将 SelsList 放置在表单上上方有足够空间以增加标题高度的位置。
当然,在这个方法中,绘制列表的标题会很简单。 我们隐藏 SelsList 标头并通过在其上方创建一个新的视图列表来模拟该标头。如下:
public partial class Form1 : Form
{
static readonly Color HEADER_FORECOLOR = Color.Yellow;
static readonly Color HEADER_BACKCOLOR = Color.FromArgb(64, 64, 122);
const int HEADER_HEIGHT = 70;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SetListView(HEADER_FORECOLOR, HEADER_BACKCOLOR, HEADER_HEIGHT, SelsList, this);
}
public static void SetListView(Color HeaderForeColor, Color HeaderBackColor, int HeaderHeight, ListView MainListView, Form MainForm)
{
// Create listViewHeader:
var listViewHeader = new ListView
{
Name = "listViewHeader",
Width = MainListView.Width,
Height = HeaderHeight,
GridLines = true,
OwnerDraw = false,
View = View.Details,
HeaderStyle = ColumnHeaderStyle.None,
BackColor = HeaderBackColor,
ForeColor = HeaderForeColor,
Location = new Point(MainListView.Location.X, MainListView.Location.Y - HeaderHeight)
};
// Set columns height in listViewHeader:
var imgList = new ImageList
{
ImageSize = new Size(1, HeaderHeight)
};
listViewHeader.SmallImageList = imgList;
MainForm.Controls.Add(listViewHeader);
// Show grid lines and hide header row in the main list view (MainListView):
MainListView.GridLines = true;
MainListView.HeaderStyle = ColumnHeaderStyle.None;
// Copy header columns as the first row to the listViewHeader:
var IsFirstRow = true;
foreach (ColumnHeader Header in MainListView.Columns)
{
listViewHeader.Columns.Add("", Header.Width, Header.TextAlign);
if (IsFirstRow)
{
IsFirstRow = false;
listViewHeader.Items.Add(Header.Text);
}
else
listViewHeader.Items[0].SubItems.Add(Header.Text);
}
}
}