积极答复者
关于WPF中PreviewTextInput事件的问题

问题
-
在使用TextBox的PreviewTextInput事件过滤用户输入的时候:1.如果输入的是英文字符,那么执行e.Handled = true之后,TextBox中确实没有字符出现。2.如果使用中文或者日文输入法,那么即使执行了e.Handled = true,在按空格键后,输入的中文字符还是会出现在TextBox中,如果按下回车,那么输入法窗口中的英文字符也会出现在TextBox中。
请问如何解决中文和日文输入状态下的过滤问题?谢谢!
开发环境如下:Windows XP 日文专业版Visual Studio 2008 专业版 SP1.NET Framework 3.5WPF
答案
-
Hi Yanxuemei,
我重现了个问题, 这个可能和输入法状态有关系,在WPF的TextBox的路由事件确实无法去停止他的消息。 不过我们可以通过监控输入法状态在WPF程序中,然后来改变对于TextBox的输入行为,比如这个类:InputMethod
对于这个缺陷,你可以到微软专门收集问题和反馈的网站上去提交一个反馈信息,我们的专业工程师会及时的对这个问题进行衡量和解答的,你可以访问一下的站点来提交关于WPf产品的反馈:https://connect.microsoft.com/WPF
谢谢!
Bob Bao
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Are you looking for a typical code sample? Please download All in One Code Framework !
如果有回复帮助并解决了您的问题,请点击 “标记为答复”,如果没有没有帮助,请随时点击“取消答复标记”
你在为寻找代码示例而苦恼吗?赶快来下载 All in One Code Framework 微软一站式代码框架 吧!- 已标记为答案 Jie BaoModerator 2010年12月8日 11:22
-
Hi Yanxuemei,
如果你觉得用TextChanged事件实现很复杂,你可以尝试一下使用PreviewKeyDown事件去解决你的问题, 就是如果用户输入的按键是为了切换输入法,那么就阻止这个事件发生。
如果你的项目允许这么做,你可以考虑一下这个方法。
Best regards,
Sheldon _Xiao
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Welcome to the All-In-One Code Framework!- 已标记为答案 Jie BaoModerator 2010年12月8日 11:22
全部回复
-
Hi Yanxuemei,
对于你的问题,我认为在用输入法输入的时候是不会进行TextBox的Check的,如果你想实现输入法的check, 你可以尝试在用户输入的内容到达TextBox的同时进行check,如果输入的内容非法, 那么就手动删除TextBox中的内容 或者清空你的TextBox。
Best regards,
Sheldon _Xiao
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Welcome to the All-In-One Code Framework! -
Hi Sheldon,
Bazinga! ;)
谢谢你的回答!
我并不是要在用输入法输入的途中进行check,而且事实上这个时候PreviewTextInput事件并不会被触发。我是希望在文字进入TextBox之前check,不管输入法是否打开。
在使用输入法输入并按下空格或者回车确定输入内容的时候,PreviewTextInput会被触发,而且可以从e.Text中取得输入的内容。可是这是即使设置e.Handled为true,输入的文字还是会出现在TextBox中。
我觉得这可能是.Net 3.5的Bug,好像4.0并不存在这个问题。不过我的项目只能使用3.5。
你提到的内容到达TextBox之后再进行处理,应该就是使用TextChanged事件吧?因为这个事件在输入法输入途中也会一直被触发,所以还必须判断输入法的状态,实现起来确实比较麻烦。在我的项目之中更是如此。
不知道关于PreviewTextInput事件的问题,微软官方是否能解决?
Best regards,
Yan -
Hi Yanxuemei,
我重现了个问题, 这个可能和输入法状态有关系,在WPF的TextBox的路由事件确实无法去停止他的消息。 不过我们可以通过监控输入法状态在WPF程序中,然后来改变对于TextBox的输入行为,比如这个类:InputMethod
对于这个缺陷,你可以到微软专门收集问题和反馈的网站上去提交一个反馈信息,我们的专业工程师会及时的对这个问题进行衡量和解答的,你可以访问一下的站点来提交关于WPf产品的反馈:https://connect.microsoft.com/WPF
谢谢!
Bob Bao
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Are you looking for a typical code sample? Please download All in One Code Framework !
如果有回复帮助并解决了您的问题,请点击 “标记为答复”,如果没有没有帮助,请随时点击“取消答复标记”
你在为寻找代码示例而苦恼吗?赶快来下载 All in One Code Framework 微软一站式代码框架 吧!- 已标记为答案 Jie BaoModerator 2010年12月8日 11:22
-
Hi Yanxuemei,
如果你觉得用TextChanged事件实现很复杂,你可以尝试一下使用PreviewKeyDown事件去解决你的问题, 就是如果用户输入的按键是为了切换输入法,那么就阻止这个事件发生。
如果你的项目允许这么做,你可以考虑一下这个方法。
Best regards,
Sheldon _Xiao
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Welcome to the All-In-One Code Framework!- 已标记为答案 Jie BaoModerator 2010年12月8日 11:22