簡體   English   中英

KeyDown事件不會從網格中引發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM