我有一个处于详细信息模式的 ListView,我希望它的一些项目的文本以粗体显示(用于突出显示它在项目文本中找到某些子字符串的位置)。
所以是这样的:
一些文件名/粗体文本/等
有没有办法做到这一点?
我有一个处于详细信息模式的 ListView,我希望它的一些项目的文本以粗体显示(用于突出显示它在项目文本中找到某些子字符串的位置)。
所以是这样的:
一些文件名/粗体文本/等
有没有办法做到这一点?
OwnerDraw
好的,所以这会很困难,因为您必须ListView
首先将该属性设置为true
. 现在您已经完成了,您将需要实现DrawColumnHeader
并将此行放入其中:
e.DrawDefault = true;
接下来,您需要在DrawItem
或DrawSubItem
取决于它所在的区域中实现以下代码。请记住,我给您的代码并不完整,因为它没有解析字符串或任何东西,您还需要进一步现在实现绘制选定项目,因为您自己绘制文本。
var boldFont = new Font(this.Font, FontStyle.Bold);
var location = new PointF(e.Bounds.Location.X, e.Bounds.Location.Y);
e.Graphics.DrawString("Somefilename/", this.Font, Brushes.Black, location);
var size = e.Graphics.MeasureString("Somefilename/", this.Font);
location.X += size.Width;
e.Graphics.DrawString("boldText", boldFont, Brushes.Black, location);
size = e.Graphics.MeasureString("boldText", boldFont);
location.X += size.Width;
e.Graphics.DrawString("/etc", this.Font, Brushes.Black, location);
另一件需要注意的事情是,您必须稍微使用偏移量,因为某些字体有边距,而粗体字体会占用更多空间。
如果Item
不是 aSubItem
那么只需e.DrawDefault = true;
为DrawSubItem
事件实现 - 反之亦然,如果项目是 aSubItem
然后为 实现该行DrawItem
。
您必须覆盖 OnPaint。试试这些链接:
但是,列表视图不是由 .net 框架绘制的,仅受支持。因此,即使您覆盖 OnPaint,它也可能不会被调用。因此,您可能还必须覆盖您的列表视图控件。