c# - Graphics MeasureString 方法是否/可以考虑容器的宽度和换行?

标签 c# .net-4.5 system.drawing measurestring

鉴于我已经知道宽度,我需要计算字符串的高度。

例如,如果有一个字符串,如“Curabitur semper ipsum semper nulla dictum,vel vulputate elit fringilla。Donec nec placerat purus,ut blandit lectus。Maecenas non molestie nulla。Class aptent taciti sociosqu。”

我可以使用下面的代码来计算该字符串的单行宽度/高度。

using (Graphics gfx = Graphics.FromImage(new Bitmap(1, 1)))
{
    System.Drawing.Font f = new System.Drawing.Font(
        FontFamily.GenericSansSerif, 10, FontStyle.Regular);
    SizeF bounds = gfx.MeasureString(
        message, f, new PointF(0, 0), 
        new StringFormat(StringFormatFlags.MeasureTrailingSpaces));
}

但是,我想做的是计算该字符串的高度(如果它在 200 像素的 div 内),考虑换行。

起初我认为它是用于派生 Graphics 对象的图像宽度的函数。

using (Graphics gfx = Graphics.FromImage(new Bitmap(500, 200)))

这没有帮助,得到了相同的单线尺寸。

有谁知道获得此信息的其他技巧吗?

最佳答案

given that I already know the width

然后您当然必须将宽度告诉 MeasureString(),请注意您从未在代码中这样做。 MeasureString() 有 several overloads ,您需要使用一个采用 SizeF 的函数。例如,传递 new SizeF(500, int.MaxValue)。您将返回的 SizeF 的宽度仍为 500,但会告诉您要查找的高度。

顺便说一句,当您绘制到打印机时,只使用 DrawString/MeasureString。对于呈现在屏幕上的文本,您应该改用 TextRenderer。

关于c# - Graphics MeasureString 方法是否/可以考虑容器的宽度和换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20843938/

相关文章:

C# task.Start() 不运行该方法

c# - 无法将电子邮件发送到带有斯堪的纳维亚字符的地址

razor - 发现同一依赖程序集的不同版本之间存在冲突。MVC3 -> MVC4/EF4 -> EF5

c# - 使用 Entity Framework 按类型加载数据

c# - 如何查找鼠标单击是否在 wf 面板中呈现的图像上?

c# - 为什么 WinForms 将我的图像绘制为 4 倍大小?

c# - 查找申请人当前的 URl

c# - 对象和实例之间的区别

.net - 使用 System.Drawing,如何绘制模仿黄色突出显示标记效果的东西?

c# - 带有嵌入式图像/css 的 ServiceStack Razor(自托管)