我使用的是窗口PreviewKeyDown事件接收来自条形码扫描仪所有的按键。 该KeyEventArgs是一个枚举,不会给我的实际字符串。 我不想使用的TextInput为一些键可以通过控制自身得到处理,不能泡到TextInput事件。
我正在寻找一种方式向我在PreviewKeyDown得到实际的字符串键转换。 我看着输入管理,等的TextCompositionManager但我没有找到一个方式,我给密钥列表,它回来了一个字符串。 的TextCompositionManager什么必须将这些要点一个字符串,它是什么,是在现有的TextInput。
下面是我使用的事件。 该keydown得到键和PreviewTextInput得到的实际文本。 因此,介于两者之间的键越来越转换为文本。
public Window1()
{
InitializeComponent();
TextCompositionManager.AddPreviewTextInputStartHandler(this, new TextCompositionEventHandler(Window_PreviewTextInput));
this.AddHandler(Window.KeyDownEvent, new System.Windows.Input.KeyEventHandler(Window_KeyDown), true);
}
private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
}
private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
}
键 - >文本转换为复杂得多比你想象的,其实是没有办法单次击键映射到单个字符,因为某些语言中,有些情况下,你需要多按键组成一个字符。
既然你有兴趣在输入从条形码扫描器(我认为只会产生什么样的窗口可以处理一小部分,可能只有ASCII甚至更少),您可以建立转换表自己和硬编码到你的程序 - 这是多少然后,比较容易处理的Windows文本处理确实(为了好玩,查找“死键”)的所有疯狂。
好吧,从偷来的这个帖子 。
[DllImport("user32.dll")]
static extern short VkKeyScan(char ch);
static public Key ResolveKey(char charToResolve)
{
return KeyInterop.KeyFromVirtualKey(VkKeyScan(charToResolve));
}