要想將 TextBlock 里的文本自動換行的話,只需要設置 TextWrapping 屬性為 Wrap 即可。但是 TextWrapping 是儘可能根據空白字元來換行的,因此,就有可能出現下麵這種狀況:每一行的尾部會出現長短不一的空白。在 UI 設計上,有一點建議,那就是同一級的內容是要對齊的。...
要想將 TextBlock 里的文本自動換行的話,只需要設置 TextWrapping 屬性為 Wrap 即可。
但是 TextWrapping 是儘可能根據空白字元來換行的,因此,就有可能出現下麵這種狀況:
每一行的尾部會出現長短不一的空白。
在 UI 設計上,有一點建議,那就是同一級的內容是要對齊的。
而現在上面這種情況就有可能誤導用戶分成三段信息:
而且這樣的顯示,也不美觀。
因此,我們不禁想問,為什麼要按照空白字元來換行,而不是按字元來換行呢?
既然微軟沒有提供這個功能,那我們只能自己動手實現。
在字元當中,有一些特殊的字元,例如換行符、製表符這些的,當中有一個更為特殊的字元,叫做零寬空格:https://en.wikipedia.org/wiki/Zero-width_space
既然它是一個空格,那麼它肯定是可以對 TextWrapping 起作用的了。
那麼只需要在文本的每一個字元間插入這麼一個零寬字元的話,我們需要的效果就應該能實現了。
編寫一個 CharacterWrapConverter:
public class CharacterWrapConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { var str = (string)value; return string.Join("\u200B", str.ToCharArray()); } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } }
效果:
那麼,現在你肯定會認為這段文本是一個整體,而不是像前面那樣看上去分成了三塊。而且看上去美觀多了。