C# · 12月 26, 2021

c# – KeyDown事件没有从网格中提升

这里我有一个带网格的示例窗口.我需要在按下按键时捕获事件.但是当我点击网格区域然后按键时它不会升起.它只有在Text@R_981_2419@聚焦时才有效.我知道如果我从Window捕获它会有效.但我有其他应用程序,几乎没有用户控件,我需要从不同的用户控件捕获它.我尝试为Window设置Focusable.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”> <Text@R_981_2419@ x:Name=”tbCount” HorizontalAlignment=”Left” Height=”35″ Margin=”310,49,0″ textwrapping=”Wrap” Text=”Text@R_981_2419@” VerticalAlignment=”Top” Width=”83″/> </Grid>解决方法 这很奇怪.这显然是一个焦点问题,我仍然无法理解为什么网格不采取焦点,即使我们点击它.

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

<Grid x:Name=”theGrid” KeyDown=”Grid_KeyDown_1″ Focusable=”True” Loaded=”TheGrid_OnLoaded”>

然后强制关注你的代码:

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

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