Silverlight中的TextWrapping功能描述爲here。但是,我試圖找出他們的換行算法的細節。什麼是Silverlight的TextWrapping中的分割字符?
顯然一個空格會導致文本中斷(或分裂),鼓勵文本換行到下一行。並通過試驗和錯誤,我發現,這些文字也引起分裂:
- \ T(標籤)
- -
- !
- ?
但我懷疑這是完整列表。有沒有人找到分割字符的完整列表(包括Unicode)?或者你有什麼聰明的建議來解決這個問題,我還沒有想到呢?試錯可能會很慢。
Silverlight中的TextWrapping功能描述爲here。但是,我試圖找出他們的換行算法的細節。什麼是Silverlight的TextWrapping中的分割字符?
顯然一個空格會導致文本中斷(或分裂),鼓勵文本換行到下一行。並通過試驗和錯誤,我發現,這些文字也引起分裂:
但我懷疑這是完整列表。有沒有人找到分割字符的完整列表(包括Unicode)?或者你有什麼聰明的建議來解決這個問題,我還沒有想到呢?試錯可能會很慢。
我猜想每個符合空格或標點符號的字符,不包括明確的非破壞字符。
但是,有一個指定的換行算法:Unicode Standard Annex #14: Unicode Line Breaking Algorithm。
TextWrapping = Wrap
將嘗試符合Johannes已經鏈接的標準Unicode標準附件#14。
但是,如果使用這種方法,文本仍然不適合寬度(由於寬度或長詞的寬度非常有限),那麼它會在兩行之間打破這個詞,它不會隱去或做任何聰明的事情。儘快放置一封信會超出寬度,如果它不能找到讓它使用標準算法的行,它會在下一行繼續該單詞。
我寫了一個小測試應用程序來幫助我確定哪些字符導致分裂。這仍然是一個手動過程,但至少現在看起來更容易。該腳本開始在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)}
顯然還有更多的角色去。不幸的是我遇到了呃逆。我試圖編寫一些超級高效的突出顯示代碼,可以處理單詞包裝文本。在我能找出突出問題的解決方案之前,我不會再繼續。