我发现DrawString函数切断整个字符或单词的方式是违反直觉的。显示文本的一部分清楚地表明缺少某些东西。
以下是一些例子:
StringTrimming.None:
StringTrimming.Character:
我想要的是什么: (GIMP样机)
StringTrimming.None与StringTrimming.Character相同吗?在我的案例中,他们似乎表现得完全相同。有什么我可以忽略的,或者这是一个已知的“功能”?
根据docs StringTrimming.None“指定不修剪。”
使用Java创建的示例的This site甚至显示“无”以修剪比“字符”更多的字符。
还有其他技巧可以达到这个效果吗?
注意:我不想显示“......”或类似内容。我发现这是浪费空间,但这可能是对UX的讨论。
答案 0 :(得分:12)
文本可能会被修剪,因为它实际上是无形地包裹到下一行。在对Graphics.DrawString
的调用中,通过传递StringFormat
属性设置为FormatFlags
的NoWrap
对象来禁用换行:
StringFormat format =
new StringFormat
{
FormatFlags = StringFormatFlags.NoWrap,
Trimming = StringTrimming.None
};
g.DrawString(s, font, brush, rect, format);
答案 1 :(得分:4)
作为一种变通方法,您可以为DrawString
方法提供比您真正想要的RectangleF
更大的Graphics
,并将RectangleF
对象的剪切区域设置为实际的RectangleF rect = new RectangleF(10, 10, 30, 15);
e.Graphics.DrawRectangle(Pens.Red, Rectangle.Truncate(rect));
RectangleF fakeRect = new RectangleF(rect.Location, new SizeF(short.MaxValue, short.MaxValue));
Region r = e.Graphics.Clip;
e.Graphics.SetClip(rect);
e.Graphics.DrawString("1 Default", this.Font, SystemBrushes.ControlText, fakeRect);
e.Graphics.Clip = r;
你想在中画出字符串。
{{1}}
请注意,此代码假定您希望将文本锚定到矩形的左上角。否则,您应该在一个方法中生成假矩形,该方法保持与预期布局矩形相同的锚点。