我想禁用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));
}
}
有人可以帮助我找到更好的解决方案吗?
答案 0 :(得分:1)
调用CommitEdit()
方法来提交数据:
private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
e.Handled = true;
((DataGrid)sender).CommitEdit();
}
}