多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
~~~ 今天调试自己写的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)); ~~~