问题描述
WPF:richtextbox控件中,如果使用英文输入法,可以通过keydown事件的e.key这个属性获得输入的字母;但是,如果切换成汉字输入法之后,如何通过keydown事件获得按下的键盘是什么呢????
解决方案
解决方案二:
切换成中文输入法后,e.key就等于ImeProcessed了啊~
解决方案三:
楼主你不是一个人
解决方案四:
对啊,同问,绑定。WPF没有winform中的KeyPress事件。不能获得e.KeyChar.因此输入法输入的都识别为Key.ImeProcessed。怎么办有人有解决办法吗?
解决方案五:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;usingSystem.Windows.Shapes;namespaceWpfApplication1{///<summary>///Window1.xaml的交互逻辑///</summary>publicpartialclassWindow1:Window{publicWindow1(){InitializeComponent();}privatevoidGrid_KeyUp(objectsender,KeyEventArgse){label1.Content=e.Key.ToString();}}}
解决方案六:
引用4楼kxyzjm62的回复:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;usingSystem.Windows.Shapes;namespaceWpfApplication1{///<summary>///Window1.xaml的交互逻辑///</summary>publicpartialclassWindow1:Window{publicWindow1(){InitializeComponent();}privatevoidGrid_KeyUp(objectsender,KeyEventArgse){label1.Content=e.Key.ToString();}}}
LS可能没明白我的意思。LS这样做确实可以得到经过输入法处理后e.Key的值。但是在KeyUp中处理就不是我想要的了。因为我的应用场景是这样的:检测textBox中按下的键,如果为中文的冒号(:)则e.Handled==true;也就是禁止输入中文冒号。但是如果按照LS这样处理,冒号还是输入进去了。而不能handled。其实TextChanged事件、TextInput事件都可以获得冒号的键值,但是都是已经输入后才能得到。问题是这并不是我想要的。还有什么别的方法吗?
解决方案七:
可以考虑输入后马上删除
解决方案八:
引用5楼YUNAN_ZHANG的回复:
Quote: 引用4楼kxyzjm62的回复:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;usingSystem.Windows.Shapes;namespaceWpfApplication1{///<summary>///Window1.xaml的交互逻辑///</summary>publicpartialclassWindow1:Window{publicWindow1(){InitializeComponent();}privatevoidGrid_KeyUp(objectsender,KeyEventArgse){label1.Content=e.Key.ToString();}}}LS可能没明白我的意思。LS这样做确实可以得到经过输入法处理后e.Key的值。但是在KeyUp中处理就不是我想要的了。因为我的应用场景是这样的:检测textBox中按下的键,如果为中文的冒号(:)则e.Handled==true;也就是禁止输入中文冒号。但是如果按照LS这样处理,冒号还是输入进去了。而不能handled。其实TextChanged事件、TextInput事件都可以获得冒号的键值,但是都是已经输入后才能得到。问题是这并不是我想要的。还有什么别的方法吗?
亲,使用PreviewKeyUp事件,将e.Handled=true
解决方案九:
引用6楼kxyzjm62的回复:
可以考虑输入后马上删除
恩恩,对的。我最后就是用的这种折中的办法。主要还是考虑到仅仅控制键盘按键是不够的。其实用户可以复制粘贴的啊。到头来还得是在TextChanged事件处理函数中处理输入字符串。
解决方案十:
如果是要判断字符串的合法性,建议用正则表达式!