C# 如何检测WPF中的按键?

C# 如何检测WPF中的按键?,c#,wpf,uikeyinput,C#,Wpf,Uikeyinput,我用WPF编写了一个带有几个按钮的桌面应用程序。到目前为止,它还可以工作,但现在我想将按钮链接到键。我希望程序检测按钮是否被按下,然后执行按钮单击方法。我试图通过添加此方法来实现这一点 public void Window1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) { switch (e.Key) { case Key.D0:

我用WPF编写了一个带有几个按钮的桌面应用程序。到目前为止,它还可以工作,但现在我想将按钮链接到键。我希望程序检测按钮是否被按下,然后执行按钮单击方法。我试图通过添加此方法来实现这一点

public void Window1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
    {
        switch (e.Key)
        {
            case Key.D0:
                Button0_Click(new object(), new RoutedEventArgs());
                break;
            case Key.D1:
                Button1_Click(new object(), new RoutedEventArgs());
                break;
            case Key.D2:
                Button2_Click(new object(), new RoutedEventArgs());
                break;
            case Key.D3:
                Button2_Click(new object(), new RoutedEventArgs());
                break;
            case Key.D4:
                Button4_Click(new object(), new RoutedEventArgs());
                break;
        }
    }

但它根本不起作用。如何将已定义的按钮方法链接到键?

您需要实现
键事件处理程序
,例如,对于键
Enter

请参阅Microsoft文档

XAML代码

<StackPanel>
 <TextBlock Width="300" Height="20">
    Type some text into the TextBox and press the Enter key.
  </TextBlock>
  <TextBox Width="300" Height="30" Name="textBox1"
           KeyDown="OnKeyDownHandler"/>
  <TextBlock Width="300" Height="100" Name="textBlock1"/>
</StackPanel>

在加载主窗口时创建事件:

在XAML中:

Loaded="MainWindow_Loaded"
在代码隐藏中:

  private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
  {
    var window = Window.GetWindow(this);
    window.KeyDown += HandleKeyPress;
  }
处理按键事件:

private void HandleKeyPress(object sender, KeyEventArgs e) 
{
   switch (e.Key)
    {
        case Key.D0:
            Button0_Click(new object(), new RoutedEventArgs());
            break;
        case Key.D1:
            Button1_Click(new object(), new RoutedEventArgs());
            break;
            ....
}

你能给我们提供更多的信息吗。执行是否从未到达_keyDown事件,或者“e.key”给出了错误的值。这是否回答了您的问题?使用
buttonToCalls.RaiseEvent(newroutedeventargs(ButtonBase.ClickEvent))如果您的方法可以检测到键事件,并且无法引发button click事件,那么请使用我前面评论中提到的命令
private void HandleKeyPress(object sender, KeyEventArgs e) 
{
   switch (e.Key)
    {
        case Key.D0:
            Button0_Click(new object(), new RoutedEventArgs());
            break;
        case Key.D1:
            Button1_Click(new object(), new RoutedEventArgs());
            break;
            ....
}