C# – KeyDown event not raising from a grid

ckeyboard-eventsnetwpf

Here I have sample window with a grid. I need to capture event when key is pressed. But it is not raising when I click grid area and then press key. It will work only if Textbox is focused. I know it will work if I capture it from Window. But I have other application with few usercontrols and I need to capture it from distinct ones. I tried to set Focusable.false for Window and true for Grid but it not helps.
Any solutions?

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

Best Answer

Right this is weird. This is clearly a focus problem, still I can not understand why the grid do not take Focus, even when we click on it.

Though there is a workaround: create an handler for the loaded event of the grid:

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

And then force focus in your code behind:

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

Your keydown event will work after that. Hope it helps.