DataDrid和ListBox中的KeyDownHandler-Event

时间:2013-04-30 12:55:22

标签: c# wpf onkeydown

我有一个示例方法OnKeyDownHandler:

    private void OnKeyDownHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Delete)
         {
            if (sender == listBox)
                listItemDelete();
            if (sender == dataGrid)
                dataGridItemDelete();
        }
    }

我有DataGridListBox。现在,当我按下Delete-Key并选择了一个项目时,我想删除一个项目。

现在我们会遇到以下情况:

我的SelectedItem中有一个listBox并且关注它。当我按Deletey-Key时,OnKeyDownHandler-Event会被触发。

我的SelectedItem中有一个dataGrid并且关注它。当我按下Delete-Key时,OnkeyDownHandler-Event将不会被触发。

当我按下Paste-Key之类的任何其他键时,将触发OnKeyDownHandler-Event。

当我按Delete-Key上的dataGrid时,系统未调用该事件。这是为什么?我无法解释。


编辑:XAML代码

<DataGrid KeyDown="OnKeyDownHandler" />

<ListBox KeyDown="OnKeyDownHandler" />

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我猜你OnKeyDownHandler附加到列表框而不是数据网格。在Window_Loaded或Page_Loaded或XAML

中需要dataGrid.OnKeyDown += OnKeyDownHandler;之类的内容
<DataGrid ... OnKeyDown="OnKeyDownHandler" ... ></DataGrid>