Silverlight的TextWrapping中有哪些分裂字符?

时间:2010-02-21 16:24:48

标签: .net silverlight silverlight-3.0 word-wrap

Silverlight中的TextWrapping功能描述为here。但是,我试图找出他们的换行算法的细节。

显然,空格会导致文本中断(或拆分),鼓励文本换行到下一行。通过反复试验,我发现这些角色也会导致分裂:

  • \ t(标签)
  • -
  • <!/ LI>

但我怀疑这是完整的清单。有没有人找到分裂字符的完整列表(包括Unicode)?或者您是否有任何聪明的建议来解决这个问题,我还没有想到呢?试验和错误可能很慢。

3 个答案:

答案 0 :(得分:4)

TextWrapping = Wrap将尝试符合Johannes已经链接的标准Unicode标准附件#14。

然而,如果使用这种方法,文本仍然不适合宽度(由于非常有限的宽度或长词),那么它将突破两行的单词,它不会隐藏或做任何聪明的事情。一旦放置一个字母就会超出宽度,如果它在行中找不到某些东西,它会让它使用标准算法,那么它将继续下一行的单词。

答案 1 :(得分:2)

我猜每个符合空格或标点符号的字符,不包括明确不破坏的字符。

但是,有一个指定的换行算法:Unicode Standard Annex #14: Unicode Line Breaking Algorithm

答案 2 :(得分:1)

我写了一个小测试应用程序,以帮助我确定哪些字符导致分裂。它仍然是一个手动过程,但至少现在看起来更容易。脚本从ASCII代码1开始,我已经达到了3000。

这会导致在字符后分割

Private arrSplitAfter() As Char = {CChar(" "), CChar("-"), ChrW(9), CChar("!"), CChar("?"), CChar("%"), CChar(")"), CChar("/"), CChar("]"), CChar("|"), CChar("}"), ChrW(133), ChrW(162), ChrW(176), ChrW(1418), ChrW(1478), ChrW(1547), ChrW(1548), ChrW(1563), ChrW(1566), ChrW(1567), ChrW(1642), ChrW(1748), ChrW(2404), ChrW(2405)}

这些会导致之前的分裂:

Private arrSplitBefore() As Char = {CChar("$"), CChar("("), CChar("+"), CChar("["), CChar("\"), CChar("{"), ChrW(163), ChrW(164), ChrW(165), ChrW(177), ChrW(180), ChrW(712), ChrW(716), ChrW(2546), ChrW(2547), ChrW(2801)}

显然还有更多的角色要去。不幸的是我遇到了打嗝。我试图编写一些超级高效的突出显示代码,可用于自动换行的文本。直到我能为我突出问题找出解决方案,我才不会再继续。