Изменить поведение по умолчанию для ввода с клавиатуры - PullRequest
0 голосов
/ 27 августа 2018

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

Я нашел обходной путь, установив обработчик 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 голосов
/ 27 августа 2018

Вызовите метод CommitEdit() для фиксации данных:

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