【问题标题】:Listening for key strokes with C#/WPF使用 C#/WPF 监听击键
【发布时间】:2014-12-14 17:52:10
【问题描述】:

我正在尝试侦听 C# 应用程序上按下的箭头键。

我在 XAML 文件的 C# 文件中添加了以下方法来侦听被按下的箭头键并报告每一个:

private void Grid_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Left)
    {
        Console.WriteLine("left");
    }
    if (e.Key == Key.Right)
    {
        Console.WriteLine("Right");
    }
    if (e.Key == Key.Up)
    {
        Console.WriteLine("Up");
    }
    if (e.Key == Key.Down)
    {
        Console.WriteLine("Down");
    }
}

在相应的 XAML 中,Grid 元素的开头如下:

<Grid Background="Black" MouseWheel="Grid_MouseWheel"
    MouseDown="Grid_MouseDown" MouseUp="Grid_MouseUp"
    MouseMove="Grid_MouseMove" KeyDown="Grid_KeyDown">

目前,与鼠标相关的侦听器正在运行,但键盘侦听器 (KeyDown="Grid_KeyDown") 没有。我是否需要添加其他内容才能完成这项工作?

【问题讨论】:

  • 我想知道Console 窗口是如何出现在WpfApplication 中的?除非您正在运行控制台应用程序并尝试显示 Wpf 窗口,否则看起来这就是问题所在。如果是测试,请尝试使用System.Diagnostics.Debug.Print 而不是Console.WriteLine
  • King,两种打印到调试/控制台的方法似乎产生了相同的结果,但写入 debug.print 可能更有意义。

标签: c# wpf xaml


【解决方案1】:

永远不会调用您的处理程序的原因是因为 Grid 本身处理 KeyDown 事件,并设置标志以阻止事件进一步冒泡(到您的应用程序处理程序)。您可以做的是处理 PreviewKeyDown 事件。这使您有机会在 Grid 之前响应按键事件。

在 XAML 文件中,像这样修改 Grid 元素:

<Grid Background="Black" MouseWheel="Grid_MouseWheel"
    MouseDown="Grid_MouseDown" MouseUp="Grid_MouseUp"
    MouseMove="Grid_MouseMove" PreviewKeyDown="Grid_PreviewKeyDown">

事件处理程序的实际代码几乎相同:

private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if(e.Key == Key.Left)
       Console.WriteLine("left");
    //  and whatever else you want to do here..
}

注意 确保 Grid 是逻辑焦点范围的一部分也很重要。如果不是,并且某些其他元素在不同的树中具有键盘焦点,则 Grid 将不会接收任何事件。详情见这里:http://msdn.microsoft.com/en-us/library/aa969768(v=vs.110).aspx

【讨论】:

  • 迈克,感谢您的快速回复。但是,我尝试进行这些更改,但我仍然看不到控制台上按箭头键的任何输出。
  • @Jake 如果您仍然没有收到事件,请确保 Grid 处于焦点位置。如果另一个控件具有键盘焦点,则 Grid 将不会接收键盘事件。我刚刚在我的电脑上检查了一个快速解决方案,它运行良好。
  • 我会补充一点,如果您正在连接 KeyPreview 事件,并且想要做的不仅仅是聆听(即,如果 Key.Left 执行一些操作),那么您可能需要设置 @987654325 @如果你处理这个动作。
猜你喜欢
  • 1970-01-01
  • 2014-10-25
  • 2014-06-04
  • 2013-07-18
  • 2019-12-07
  • 2016-06-10
  • 2011-07-25
  • 2017-10-03
  • 1970-01-01
相关资源
最近更新 更多