需求:實時解析RichTextBox中輸入的內容,不允許換行。 設計:由於Wpf對東亞語言支持不太好,首先拋棄監聽KeyUp或KeyDown的想法,選擇訂閱PreviewTextInput事件,然後在事件里讀取文本,解析文本,最後清空控制項中的文本,再按照順序把解析的文本集合添加到控制項中。 實現:按照 ...
需求:實時解析RichTextBox中輸入的內容,不允許換行。
設計:由於Wpf對東亞語言支持不太好,首先拋棄監聽KeyUp或KeyDown的想法,選擇訂閱PreviewTextInput事件,然後在事件里讀取文本,解析文本,最後清空控制項中的文本,再按照順序把解析的文本集合添加到控制項中。
實現:按照設計完成了代碼實現,在預設英文輸入法下一切正常,切換到中文輸入法試試,結果輸入字元的時候文本不接受了,奇了個怪了,什麼情況?把“設計”中事件里的內容註釋掉,發現OK,這說明是內部實現問題。馬上定位到RichTextBox.Paragraph.Inlines.Clear();果然把這句話先註釋掉調試,一切任何輸入法都正常。好吧,我沒時間研究Clear()方法內部是如何實現的,既然Clear()不行就寫代碼迴圈刪除了,OK,輸入任何字元均可以。
總結:這應該IME模式下的一個Bug吧?算了,隨它去吧。