使用keydown wpf获取小写

oli*_*dev 7 wpf

我希望键盘上的按键有或没有caplock:

private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
   e.Key.ToString();
}
Run Code Online (Sandbox Code Playgroud)

当我在键盘上键入"a"或"A"时,e.Key的结果始终为"A".如何输入'a'进入'a'?

Err*_*Efe 6

您无法使用该KeyDown活动.您需要使用该TextInput活动.这将打印原始字母及其标题(大写/小写).

    private void Window_TextInput(object sender, TextCompositionEventArgs e)
    {
        Console.WriteLine(e.Text);
    }
Run Code Online (Sandbox Code Playgroud)

现在,如果按下它,它也会打印Shift等等.如果你不希望那些修饰符只是获取字符串的最后一项 - 将它作为一个char数组;) -


Roh*_*ats 6

您可以使用Control.IsKeyLocked方法检查KeyDown事件是否CAPS lock打开或关闭.此外,您可能需要检查用户是否使用密钥键入资本,该密钥可以使用这样的枚举来识别-ShiftModifiers

private void Window_KeyDown(object sender, KeyEventArgs e)
{
   string key = e.Key.ToString();
   bool isCapsLockOn = System.Windows.Forms.Control
                        .IsKeyLocked(System.Windows.Forms.Keys.CapsLock);
   bool isShiftKeyPressed = (Keyboard.Modifiers & ModifierKeys.Shift)
                                == ModifierKeys.Shift;
   if (!isCapsLockOn && !isShiftKeyPressed)
   {
      key = key.ToLower();
   }
}
Run Code Online (Sandbox Code Playgroud)


Had*_*ari 5

覆盖TextInput / PreviewTextInput(或监听事件)应该可以工作。

protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
    base.OnPreviewTextInput(e);
    Console.WriteLine(e.Text);
}
Run Code Online (Sandbox Code Playgroud)