2010-02-21 18 views
5

Silverlight中的TextWrapping功能描述爲here。但是,我試圖找出他們的換行算法的細節。什麼是Silverlight的TextWrapping中的分割字符?

顯然一個空格會導致文本中斷(或分裂),鼓勵文本換行到下一行。並通過試驗和錯誤,我發現,這些文字也引起分裂:

  • \ T(標籤)
  • -

但我懷疑這是完整列表。有沒有人找到分割字符的完整列表(包括Unicode)?或者你有什麼聰明的建議來解決這個問題,我還沒有想到呢?試錯可能會很慢。

回答

4

TextWrapping = Wrap將嘗試符合Johannes已經鏈接的標準Unicode標準附件#14。

但是,如果使用這種方法,文本仍然不適合寬度(由於寬度或長詞的寬度非常有限),那麼它會在兩行之間打破這個詞,它不會隱去或做任何聰明的事情。儘快放置一封信會超出寬度,如果它不能找到讓它使用標準算法的行,它會在下一行繼續該單詞。

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)} 

顯然還有更多的角色去。不幸的是我遇到了呃逆。我試圖編寫一些超級高效的突出顯示代碼,可以處理單詞包裝文本。在我能找出突出問題的解決方案之前,我不會再繼續。