[英]KeyDown event not raising from a grid
這里我有一個帶網格的示例窗口。 我需要在按下按鍵時捕獲事件。 但是當我點擊網格區域然后按鍵時它不會升起。 它只有在Textbox聚焦時才有效。 我知道如果我從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">
<TextBox x:Name="tbCount" HorizontalAlignment="Left" Height="35" Margin="310,49,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="83"/>
</Grid>
我對通用Windows平台(UWP)應用程序有同樣的問題。 我將事件附加到XAML中的網格,但它只在焦點位於TextBox上時才有效。 我在MSDN上找到了答案(不僅僅是一種解決方法): https : //social.msdn.microsoft.com/Forums/en-US/56272bc6-6085-426a-8939-f48d71ab12ca/page-keydown-event-not-firing ?論壇= winappswithcsharp
總而言之,根據該帖子,事件不會觸發,因為當對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;
}
這對我來說是預期的。
這很奇怪。 這顯然是一個焦點問題,我仍然無法理解為什么網格不采取焦點,即使我們點擊它。
雖然有一種解決方法:為網格的已加載事件創建處理程序:
<Grid x:Name="theGrid" KeyDown="Grid_KeyDown_1" Focusable="True" Loaded="TheGrid_OnLoaded">
然后強制關注你的代碼:
private void TheGrid_OnLoaded(object sender, RoutedEventArgs e)
{
theGrid.Focus();
}
你的keydown事件將在那之后發揮作用。 希望能幫助到你。
我嘗試使用Focus方法,但無效,直到我將Focusable屬性設置為true(默認為False。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.