没有省略号的TextTrimming

时间:2015-02-16 08:11:39

标签: c# wpf

我正在通过DrawingContext直接将文字绘制到控件中。文本是多行的,必须符合某个(计算的)宽度。如果一条线太长,那么就应该修剪它。

现在,WPF允许我使用TextTrimming.CharacterEllipsis自动修剪文本,但是它在修剪文本时坚持要添加省略号。因为我想尽可能多地显示文本(没有TextWrap),我想问是否有一个函数可以在没有省略号的情况下进行修剪,例如只显示符合指定宽度的字符。

目前我正在使用dc.PushClip / dc.Pop来剪切所需宽度的文字。然而,这会导致单词被切割成中间字符。

我想我可以分别得到文本的每一行,然后计算格式化文本的长度(直到我有最大拟合文本),但这看起来相当复杂(甚至可能很慢,因为我显示的很多很多文字)。

是否有内置函数将文本剪裁到一定宽度而没有省略号?也许使用P / Invoke?

编辑(回应Peter Dunhiho):我正在使用TextTrimming.None。如果我不将剪辑推送到DrawingContext,那么文本将(根据MaxTextWidth)将被写入当前边界或转到下一行。

目前我正在做以下事情:

public void Render(double left, double top, double width, double height, DrawingContext dc)
{

   FormattedText text = new FormattedText(text,
                                       CultureInfo.CurrentUICulture,                                                                                     
                                       FlowDirection.LeftToRight,
                                       ArialTypeFace, 12,                                 
                                       BrushDictionary.SolidBlack);

   text.Trimming = TextTrimming.None;
   text.MaxTextWidth = width + 5;
   text.MaxTextHeight = height;
   dc.PushClip(new RectangleGeometry(new Rect(left,                             
   top, width-0.5, height - 0.5)));
   dc.DrawText(text, new Point(left, top));
   dc.Pop();
}

这将正确地将文本(有多行)放在所需的矩形中。但是,如果文本中的一行太长,则文本将在字符中间被截断。我希望显示适合指定矩形的最后一个字符,并为每一行切掉其余字符。

编辑2:

示例文字:

This is just a random text 
which spans multiple lines

使用TextTrimming.CharacterEllipsis:

This is jus...
which spans...

目前的方法:

This is just a
which spans mu

当前方法(带剪辑)可能会直接剪切到该行的最后一个字符,这是我想要阻止的!

0 个答案:

没有答案