2013-03-06 45 views
6

這裏我有一個網格示例窗口。我需要在按下按鍵時捕捉事件。但是當我點擊網格區域然後按下按鍵時,它不會升高。它只有在Textbox集中的情況下才能工作。我知道它會工作,如果我從窗口捕獲它。但我有其他的應用程序用戶控件很少,我需要從不同的應用程序捕獲它。我試圖爲Window設置Focusable.false,併爲網格設置true,但它沒有幫助。 任何解決方案?KeyDown事件沒有從網格上升

<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> 

回答

3

好的,這是不可思議。這顯然是一個焦點問題,但我不明白爲什麼網格不會採取焦點,即使我們點擊它。

雖然有解決方法:創建網格的加載事件的處理程序:

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

再發力的重點在後面的代碼:

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

你keydown事件會後工作那。 希望它有幫助。

+0

這是更好,但在我的實際應用中它從每一個用戶控件雖然觸發keydown事件我把它只吸引到一個。我必須調查.. – Dork 2013-03-06 10:45:28

+0

我有多個窗口,這不是正確的事情,使他們都集中 – Dork 2013-03-06 11:05:41

5

我與通用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

總之,根據該帖子,事件不會觸發,因爲當焦點到文本框丟失時,它會傳遞更高的值,沒有得到它。應該使用Window.Current.CoreWindow.KeyDown。我已將事件處理程序添加到頁面加載事件中,如下所示:

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

這可以按預期對我工作。

+4

我認爲這個答案告訴回答的最佳方式。它適用於所有情況。 注意:我建議在'OnNavigatedTo'上添加事件處理程序,**不要忘記**在OnNavigatedFrom上刪除處理程序# – 2017-04-19 17:08:25

2

我嘗試使用對焦方法也無濟於事,直到我設置Focusable屬性爲true(這是默認爲False。)

+0

啊哈!這就是我所錯過的。謝謝 – NielW 2017-12-15 16:58:38