Wpf控件RichTextBox(在IME模式下)段落元素集合的Inlines.Clear()和控件的PreviewTextInput事件_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Wpf控件RichTextBox(在IME模式下)段落元素集合的Inlines.Clear()和控件的PreviewTextInput事件

Wpf控件RichTextBox(在IME模式下)段落元素集合的Inlines.Clear()和控件的PreviewTextInput事件

 2017/9/18 19:33:30  尹泓  程序员俱乐部  我要评论(0)
  • 摘要:需求:实时解析RichTextBox中输入的内容,不允许换行。设计:由于Wpf对东亚语言支持不太好,首先抛弃监听KeyUp或KeyDown的想法,选择订阅PreviewTextInput事件,然后在事件里读取文本,解析文本,最后清空控件中的文本,再按照顺序把解析的文本集合添加到控件中。实现:按照设计完成了代码实现,在默认英文输入法下一切正常,切换到中文输入法试试,结果输入字符的时候文本不接受了,奇了个怪了,什么情况?把“设计”中事件里的内容注释掉,发现OK
  • 标签:事件 view 模式 控件 WPF控件

需求:实时解析RichTextBox中输入的内容,不允许换行。

设计:由于Wpf对东亚语言支持不太好,首先抛弃监听KeyUp或KeyDown的想法,选择订阅PreviewTextInput事件,然后在事件里读取文本,解析文本,最后清空控件中的文本,再按照顺序把解析的文本集合添加到控件中。

实现:按照设计完成了代码实现,在默认英文输入法下一切正常,切换到中文输入法试试,结果输入字符的时候文本不接受了,奇了个怪了,什么情况?把“设计”中事件里的内容注释掉,发现OK,这说明是内部实现问题。马上定位到RichTextBox.Paragraph.Inlines.Clear();果然把这句话先注释掉调试,一切任何输入法都正常。好吧,我没时间研究Clear()方法内部是如何实现的,既然Clear()不行就写代码循环删除了,OK,输入任何字符均可以。

 

总结:这应该IME模式下的一个Bug吧?算了,随它去吧。

发表评论
用户名: 匿名