Я хочу отключить стандартное поведение элемента управления пользовательского интерфейса 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));
}
}
Может кто-нибудь помочь мне найти лучшее решение?