Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 将PreviewKeyDown中收到的密钥转换为字符串_Wpf_Key_Barcode_Keydown_Textcompositionmanager - Fatal编程技术网

Wpf 将PreviewKeyDown中收到的密钥转换为字符串

Wpf 将PreviewKeyDown中收到的密钥转换为字符串,wpf,key,barcode,keydown,textcompositionmanager,Wpf,Key,Barcode,Keydown,Textcompositionmanager,我在窗口上使用PreviewKeyDown事件来接收来自条形码扫描仪的所有密钥。KeyEventArgs是一个枚举,没有给我实际的字符串。我不想使用TextInput,因为一些键可能会被控件本身处理,并且可能不会在TextInput事件前冒泡 我正在寻找一种方法,将我在PreviewKeyDown中获得的键转换为实际字符串。 我查看了InputManager、TextCompositionManager等,但我没有找到一种方法,可以给出键列表,然后返回一个字符串。 TextComposition

我在窗口上使用PreviewKeyDown事件来接收来自条形码扫描仪的所有密钥。KeyEventArgs是一个枚举,没有给我实际的字符串。我不想使用TextInput,因为一些键可能会被控件本身处理,并且可能不会在TextInput事件前冒泡

我正在寻找一种方法,将我在PreviewKeyDown中获得的键转换为实际字符串。 我查看了InputManager、TextCompositionManager等,但我没有找到一种方法,可以给出键列表,然后返回一个字符串。
TextCompositionManager或其他东西必须将这些键转换为TextInput中可用的字符串。

以下是我正在使用的事件。KeyDown获取键,previewtextput获取实际文本。所以在两个键之间的某个地方会被转换成文本

 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)
            {
            }

按键->文本转换比你想象的要复杂得多,实际上没有办法将一个按键笔划映射到一个字符,因为在某些语言和某些情况下,你需要多次按键才能组成一个字符


由于您对条形码扫描仪的输入感兴趣(我认为这只会生成windows可以处理的一小部分,可能只有ASCII,甚至更少),因此您可以自己构建转换表,并将其硬编码到程序中-这比处理windows文本处理的所有疯狂行为要容易得多(为了好玩,请查找“死键”)。

在KeyUp/KeyDown事件中,.NET framework返回原始扫描代码完全是“不可能的”(如“太令人震惊以至于不可能是真的”)。那么我们该怎么办呢?使用
previewtexteiput
事件。我们得到按下键的字符串表示形式如下:
void KeyboardNavigation(对象发送方,TextCompositionEventArgs e){string typedChar=e.Text;}