更改键盘输入的默认行为

时间:2018-08-27 13:54:55

标签: c# wpf datagrid wpfdatagrid

我想禁用WPF DataGrid UI控件的默认行为,即在按下特定单元格上的Enter按钮时,焦点将自动移至下一个单元格。它应该只提交编辑后的新数据,而不要移到下一个单元格。

我找到了一种解决方法,方法是安装一个PreviewKeyDown处理程序并使用两个MoveFocus调用。没有这种解决方法(仅使用e.Handled = true语句),将无法正确提交已编辑的数据(单元将无限地处于编辑模式)。

XAML:

<DataGrid PreviewKeyDown="DataGrid_PreviewKeyDown"... </DataGrid>

处理程序:

    private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        var uiElement = e.OriginalSource as UIElement;
        if (e.Key == Key.Enter && uiElement != null)
        {
            e.Handled = true;
            uiElement.MoveFocus(new TraversalRequest(FocusNavigationDirection.Left));
            uiElement.MoveFocus(new TraversalRequest(FocusNavigationDirection.Right));
        }
    }

有人可以帮助我找到更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

调用CommitEdit()方法来提交数据:

private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        e.Handled = true;
        ((DataGrid)sender).CommitEdit();
    }
}