如何防止DataGrid接收任何键盘焦点?

时间:2015-03-18 13:56:00

标签: wpf xaml datagrid focus inputbinding

我有一个包含Grid的Window,其中包含另一个带有InputBindings的Grid(在Enter键和Delete键上),以及其他控件中的只读DataGrid。

当DataGrid具有焦点时,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 个答案:

答案 0 :(得分:0)

您可以处理PreviewGotKeyboardFocus事件。

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

 private void grid_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        e.Handled = true;
    }