【问题标题】:How to detect a pressed key in WPF? [duplicate]如何检测 WPF 中的按键? [复制]
【发布时间】:2020-01-10 15:40:41
【问题描述】:

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

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;
        }
    }

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

【问题讨论】:

  • 你能给我们更多的信息吗?执行是否永远不会到达 _keyDown 事件,或者“e.key”是否给出了错误的值。
  • 使用buttonToCalls.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
  • 如果你的方法可以检测到按键事件并且不能引发按钮点击事件,那么使用我之前评论中提到的命令

标签: c# wpf uikeyinput


【解决方案1】:

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

在 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;
            ....
}

【讨论】:

    【解决方案2】:

    您需要实现key event handler,例如密钥Enter

    参考微软文档here

    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>
    

    后端的关键事件处理程序

    private void OnKeyDownHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Return)
        {
           //do your things here 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 2021-07-21
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 2014-07-13
      相关资源
      最近更新 更多