Как запретить DataGrid получать фокус клавиатуры?

У меня есть окно, содержащее сетку, которая содержит другую сетку с InputBindings (на клавишах Enter и Delete) и, среди других элементов управления, только для чтения DataGrid.

Когда DataGrid имеет фокус, InputBindings прекращает запуск своих команд. Затем я вынужден вручную передать фокус другому элементу управления, прежде чем InputBindings сможет работать.

Как я могу обойти это поведение? Я попытался поиграть практически со всеми свойствами ввода / клавиатуры, связанными с DataGrid, но безуспешно.

Вот XAML, хотя он не очень полезен:

<Grid>
    <Grid.InputBindings>
        <KeyBinding Key="Enter" Command="{Binding DoStuff}"/>
        <KeyBinding Key="Delete" Command="{Binding UndoStuff}"/>
    </Grid.InputBindings>
    <!-- stuff... -->
    <Grid >
        <!-- more stuff... -->
        <DataGrid IsReadOnly="True" ItemsSource="{Binding SomeProperty}" SelectedItem="{Binding SomeSelectedProperty, Mode=TwoWay}">
            <DataGrid.Columns>
                <!-- blah -->
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Grid>

1 ответ

Вы можете справиться с PreviewGotKeyboardFocus событие.

<DataGrid Name="grid"  PreviewGotKeyboardFocus="grid_PreviewGotKeyboardFocus"

 private void grid_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        e.Handled = true;
    }
Другие вопросы по тегам