C# DataGrid和ListBox中的KeyDownHandler事件

C# DataGrid和ListBox中的KeyDownHandler事件,c#,wpf,onkeydown,C#,Wpf,Onkeydown,我有一个示例方法OnKeyDownHandler: private void OnKeyDownHandler(object sender, KeyEventArgs e) { if (e.Key == Key.Delete) { if (sender == listBox) listItemDelete(); if (sender == dataGrid)

我有一个示例方法OnKeyDownHandler:

    private void OnKeyDownHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Delete)
         {
            if (sender == listBox)
                listItemDelete();
            if (sender == dataGrid)
                dataGridItemDelete();
        }
    }
我有一个
DataGrid
和一个
ListBox
。现在,当我按下
删除键
并选择一个项目时,我想删除一个项目

现在我们要经历以下情况:

我的
列表框中有一个
SelectedItem
,它是我关注的焦点。当我按下
Deletey键时
将触发
OnKeyDownHandler事件

在我的
dataGrid
中有一个
SelectedItem
,它是我关注的焦点。当我按下
Delete键时
,不会触发
OnkeyDownHandler事件

当我按下任何其他键(如
粘贴键
)时,将触发OnKeyDownHandler事件

在我的
dataGrid
上按
Delete键时,不会调用该事件。为什么呢?我无法解释


编辑:XAML代码

<DataGrid KeyDown="OnKeyDownHandler" />

<ListBox KeyDown="OnKeyDownHandler" />

我猜OnKeyDownHandler是连接到列表框而不是数据网格的。您需要类似于
dataGrid.OnKeyDown+=OnKeyDownHandler在窗口中加载或页面中加载或在XAML中加载

<DataGrid ... OnKeyDown="OnKeyDownHandler" ... ></DataGrid>


您的
数据网格上的
按键
事件正在由活动单元格处理。
DataGridView
控件正在处理事件,而不是您的代码隐藏。您可以尝试使用
PreviewKeyDown
事件而不是
KeyDown
来处理
DataGrid

事件连接的XAML是什么样子的?我已经用XAML代码编辑了我的问题。为什么它对其他键(如粘贴键)如此有效?很高兴它对您有效。如果您的问题得到了回答,请将其标记为已解决。是的,我必须等待2分钟进行标记,而且我当时远离键盘:)