我有一个处于详细信息模式的 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,它也可能不会被调用。因此,您可能还必须覆盖您的列表视图控件。