KeyDown事件不会从网格中引发

这里我有一个带网格的示例窗口。 我需要在按下按键时捕获事件。 但是当我点击网格区域然后按键时它不会升起。 它仅在Textbox聚焦时才有效。 我知道如果我从Window捕获它会有效。 但我有其他应用程序几乎没有用户控件,我需要从不同的应用程序捕获它。 我尝试为Window设置Focusable.false,为Grid设置为true,但它没有帮助。 有解决方案?

    

这很奇怪。 这显然是一个焦点问题,我仍然无法理解为什么网格不采取焦点,即使我们点击它。

虽然有一种解决方法:为网格的已加载事件创建处理程序:

  

然后强制关注你的代码:

  private void TheGrid_OnLoaded(object sender, RoutedEventArgs e) { theGrid.Focus(); } 

你的keydown事件将在那之后发挥作用。 希望能帮助到你。

我对通用Windows平台(UWP)应用程序有同样的问题。 我将事件附加到XAML中的网格,但只有在焦点位于TextBox上时它才会起作用。 我在MSDN上找到了答案(不仅仅是一种解决方法): https : //social.msdn.microsoft.com/Forums/en-US/56272bc6-6085-426a-8939-f48d71ab12ca/page-keydown-event-not-firing ?论坛= winappswithcsharp

总而言之,根据该post,事件不会触发,因为当对TextBox的焦点丢失时,它会向上传递,因此Grid将无法获取它。 应该使用Window.Current.CoreWindow.KeyDown 。 我已将事件处理程序添加到页面加载的事件中,如下所示:

 private void Page_Loaded(object sender, RoutedEventArgs e) { Window.Current.CoreWindow.KeyDown += coreWindow_KeyDown; Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp; } 

这对我来说是预期的。

我尝试使用Focus方法,但无效,直到我将Focusable属性设置为true(默认为False。)