阻止DataGrid处理Enter键



我有一个只读数据网格,它在显示为对话框的窗口中显示项目。此对话框还有两个按钮,一个用于确认,另一个用于取消对话框。确认按钮的IsDefault属性设置为true,取消按钮的IsCancel属性设置为true。我想保持默认的对话框按钮行为,即按下确认按钮或ENTER时确认并关闭对话框,通过按下取消按钮或ESCAPE取消并关闭对话框。

不幸的是,DataGrid使用ENTER-键的KeyDown事件,并选择网格内的下一行。由于KeyDown事件被标记为由DataGrid处理,因此对话框将不会被确认并保持打开状态。我想要的行为是,所选的行不会更改,对话框将被确认并关闭。

我可以创建自己的DataGrid派生类型覆盖OnKeyDown,如下所示:

public class MyDataGrid : DataGrid
{
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key != Key.Enter)
{
base.OnKeyDown(e);
}
}
}

但我想知道是否还有其他方法不必创建派生类型来实现我的目标。

您可以使用curerntDataGrid

<DataGrid PreviewKeyDown="DataGrid_PreviewKeyDown"/>
private void DataGrid_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
// This makes this key pressed event end here.
e.Handled = true;
// Do what you need to do here...
}
}

最新更新