Как запретить 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;
}