GDI + MeasureString()错误地修剪文本

我正在尝试完成可以在屏幕上布局文本的代码。 以下C#代码放在一个空的Windows窗体的Paint事件处理程序中是一个例子:

 string[] s = new string[] { "Sample text ", "to test", " this layout ", "algorithm" }; PointF[] pts = new PointF[s.Length]; PointF start = new PointF(10, 10); StringFormat f = new StringFormat(StringFormat.GenericTypographic); float x = start.X; float y = start.Y; for (int i = 0; i < pts.Length; i++) { pts[i] = new PointF(x, y); SizeF sz = e.Graphics.MeasureString(s[i], Font, pts[i], f); x += sz.Width; e.Graphics.DrawString(s[i], Font, Brushes.Black, pts[i]); } 

除了修剪s数组中每段文本之前和之后的空白外,它才能正常工作。 它应该显示如下:

用于测试此布局算法的示例文本

但相反它看起来像这样:

示例textto testthis布局算法

我已确认f.Trimming属性设置为None 。 我猜想这会给字符串的度量增加尾随和开放空白,但它仍会修剪它。 有关如何制作MeasureString方法的任何想法都包含空格? 否则将完全处理字距调整。

 StringFormat f = new StringFormat(StringFormat.GenericTypographic) { FormatFlags = StringFormatFlags.MeasureTrailingSpaces };