这里我有一个带网格的示例窗口。我需要在按下键时捕获事件。但是当我单击网格区域然后按下键时,它不会引发。只有当文本框具有焦点时,它才能工作。我知道如果我从窗口捕获它,它会工作。但是我有其他用户控件很少的应用程序,我需要从不同的控件捕获它。我尝试设置为可聚焦。对于Window为false,对于Grid为true,但这没有帮助。有什么解决方案吗?
<Window x:Class="Beta.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Closed="Window_Closed_1" Focusable="False">
<Grid KeyDown="Grid_KeyDown_1" Focusable="True">
<TextBox x:Name="tbCount" HorizontalAlignment="Left" Height="35" Margin="310,49,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="83"/>
</Grid>
4条答案
按热度按时间uwopmtnx1#
这很奇怪。这显然是一个焦点问题,我仍然不明白为什么网格不采取焦点,甚至当我们点击它。
尽管有一个解决方法:为网格的loaded事件创建一个处理程序:
然后在代码后面强制焦点:
您的keydown事件将在此之后工作。希望它有帮助。
dauxcl2d2#
我在使用通用Windows平台(UWP)应用程序时遇到了同样的问题。我将事件附加到XAML格式的网格中,但只有当焦点在TextBox上时才能工作。我在MSDN上找到了答案(不仅仅是解决方法):https://social.msdn.microsoft.com/Forums/en-US/56272bc6-6085-426a-8939-f48d71ab12ca/page-keydown-event-not-firing?forum=winappswithcsharp
总之,根据该帖子,该事件不会触发,因为当焦点丢失到TextBox时,它会向上传递,因此Grid不会获得它。应该使用
Window.Current.CoreWindow.KeyDown
来代替。我已经将事件处理程序添加到page loaded事件中,如下所示:这对我来说和预期的一样有效。
2nbm6dog3#
我也尝试过使用Focus方法,但没有效果,直到我将Focusable属性设置为true(默认设置为False)。
cwdobuhd4#
我遇到了同样的问题,我使用了
PreviewKeyDown
事件,它对我很有效。