需求:实时解析RichTextBox中输入的内容,不允许换行。
设计:由于Wpf对东亚语言支持不太好,首先抛弃监听KeyUp或KeyDown的想法,选择订阅PreviewTextInput事件,然后在事件里读取文本,解析文本,最后清空控件中的文本,再按照顺序把解析的文本集合添加到控件中。
实现:按照设计完成了代码实现,在默认英文输入法下一切正常,切换到中文输入法试试,结果输入字符的时候文本不接受了,奇了个怪了,什么情况?把“设计”中事件里的内容注释掉,发现OK,这说明是内部实现问题。马上定位到RichTextBox.Paragraph.Inlines.Clear();果然把这句话先注释掉调试,一切任何输入法都正常。好吧,我没时间研究Clear()方法内部是如何实现的,既然Clear()不行就写代码循环删除了,OK,输入任何字符均可以。
总结:这应该IME模式下的一个Bug吧?算了,随它去吧。