WPF TextBox PreviewTextInput handle IME (chinese)

今天调试自己写的WPF的Behavior, 是关于TextBox只能输入数据或者小数点的。
发现有个问题, 就是英文IME下字母等等都能过滤, 但是一旦切换到中文输入法, 就会发现在OnPreviewTextInput处理 时Textbox.Text已经得到中文输入的值,导致就算PreviewTextInput响应了,而且当前的中文也被过滤了,但是TextBox.Text已经有同样的中文存在, 表现出过滤失败。

原因可能是在中文输入后TextBox第一次得到值TextInput没有响应,而第二次响应时就算不合法被过滤,但第一次的值已存在。


解决办法:
不使用TextBox的PreviewTextInput事件, 而是调用TextCompositionManager来重新注册AddPreviewTextInputStartHandler的处理。 如下:

       //this.AssociatedObject.PreviewTextInput += new TextCompositionEventHandler(OnPreviewTextInput);
            TextCompositionManager.AddPreviewTextInputStartHandler(this.AssociatedObject, 
                new TextCompositionEventHandler(OnPreviewTextInput));
posted @ 2013-07-03 14:30  muzizongheng  阅读(1559)  评论(0编辑  收藏  举报
如果我们时时忙着展现自己的知识, 将何从忆起成长所需的无知?