C# 如何从WPF KeyDown事件中获取正常字符?

C# 如何从WPF KeyDown事件中获取正常字符?,c#,wpf,events,keyboard,C#,Wpf,Events,Keyboard,我希望通过WPFKeyDown事件中的e.Key属性传递ASCII字符。不幸的是,没有简单的方法可以做到这一点。有两种变通方法,但它们都在特定条件下失效 第一个是将其转换为字符串: TestLabel.Content = e.Key.ToString(); 这将为您提供CapsLock和Shift等功能,但是,对于字母数字键,它无法告诉您Shift等的状态,因此您必须自己解决这一问题 第二种选择是使用TextInput事件,其中e.Text将包含实际输入的文本。这将为您提供字母数字键的正确字符

我希望通过WPF
KeyDown
事件中的
e.Key
属性传递ASCII字符。

不幸的是,没有简单的方法可以做到这一点。有两种变通方法,但它们都在特定条件下失效

第一个是将其转换为字符串:

TestLabel.Content = e.Key.ToString();
这将为您提供CapsLock和Shift等功能,但是,对于字母数字键,它无法告诉您Shift等的状态,因此您必须自己解决这一问题


第二种选择是使用TextInput事件,其中e.Text将包含实际输入的文本。这将为您提供字母数字键的正确字符,但不会为您提供控制字符。

根据您的简明问题,我假设您需要一种方法来获取按下键的ASCII值。这应该行得通

private void txtAttrName_KeyDown(object sender, KeyEventArgs e)
        {
            Console.WriteLine(e.Key.ToString());
            char parsedCharacter = ' ';
            if (Char.TryParse(e.Key.ToString(), out parsedCharacter))
            {
                Console.WriteLine((int) parsedCharacter);
            }
        }
e、 g.如果按Ctrl+S,您将看到以下输出

LeftCtrl
S
83

您是否可以使用TextInput事件而不是KeyDown?TextCompositionEventArgs类允许您直接检索通过e.text属性输入的文本

private void UserControl\u TextInput(
对象发送器,
System.Windows.Input.TextCompositionEventArgs(e)
{
var t=e.Text;
}

Shift+2应为@,但将为2!对于数字,我得到的是“D3”而不是“3”,我不知道是谁对这个答案投了更高的票,但是D3和NumPad3并不是一个普通的字符,我希望它能得到与e.Key.ToString()相同的结果,而且它仍然不能回答真正的问题。这非常有效。它捕获任何按键或组合的值?其中<代码>ie shift+i将显示大写字母i。将UserControl_TextInput附加到主窗口构造函数中的TextInput事件中,并删除您的叔叔。ie:
this.TextInput+=UserControl\u TextInput
在构造函数中(或在需要的地方),对于大量键(数字、标点符号、小写键等),此操作失败。
System.Enum.ToObject(e.Key.GetType(), (byte)e.Key).ToString();