假设我有字符串“Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus arcu massa, tempus non tincidunt ut, tempus sit amet odio. Mauris in dui sed enim vulputate dictum.”
我希望该字符串由特定长度(以像素为单位)包裹并且不破坏单词。以 80 像素为例。
我有用于绘制字符串的 Font 变量和 Graphics 变量(通常称为“g”),因此我可以在需要时测量字符串的长度。
我发现的所有示例仅按字符长度包装文本,但我需要以像素为单位进行 GDI+ 绘图。我不想使用 TextRenderer 控件,因为它似乎有错误。有时它会测量它自己的文本高度错误。这很罕见,但它会发生。
到目前为止,我得到了以下信息:
public static string WrapTextByPixels(string text, ref Graphics g, Font font, float maxWidth)
{
string[] originalLines = text.Split(new[] { " " }, StringSplitOptions.None);
var wrapBuilder = new StringBuilder();
float currentLineWidth = 0;
foreach (var item in originalLines)
{
float itemWidth = g.MeasureString(item, font).Width;
currentLineWidth += itemWidth;
if (currentLineWidth > maxWidth ||
itemWidth > maxWidth) // When a single word is longer than the maxWidth then just add it
{
wrapBuilder.Append(Environment.NewLine);
currentLineWidth = 0;
}
wrapBuilder.Append(item + " ");
}
return wrapBuilder.ToString();
}
但是上面的代码不起作用。有些行还是太长了。