如何从WPF KeyDown事件中获取普通字符?

时间:2009-01-28 08:47:04

标签: c# wpf events keyboard

我想要来自WPF e.Key事件的KeyDown属性传递的ASCII字符。

4 个答案:

答案 0 :(得分:4)

不幸的是,没有简单的方法可以做到这一点。有2种解决方法,但它们都会在某些条件下崩溃。

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

TestLabel.Content = e.Key.ToString();

这会给你像CapsLock和Shift等的东西,但是,在字母数字键的情况下,它将无法告诉你当时的转移等状态,所以你必须想出来自己。

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

答案 1 :(得分:4)

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

private void UserControl_TextInput(
    object sender, 
    System.Windows.Input.TextCompositionEventArgs e)
{
     var t = e.Text;
}

答案 2 :(得分:3)

从简明的问题来看,我假设您需要一种方法来获取按下的键的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

答案 3 :(得分:-2)

System.Enum.ToObject(e.Key.GetType(),(byte)e.Key).ToString();