删除或修改标准命令的默认键手势

时间:2010-08-21 22:05:18

标签: .net wpf command

我需要删除(或至少更改)与wpf标准命令相关的默认手势。

这是我的问题:

我有一个Datagrid(来自infragistics的XamDataGrid),我已将其与我创建的自定义命令相关联。该命令使用“ctrl-delete”手势 只要我不编辑单元格的值,这就有效。

当我编辑Cell时,使用TextEditor。当我使用“ctrl-delete”手势而不是执行我的命令时,执行DeleteNextWord命令 这是正常的,TextEditor具有焦点,并且由于没有附加绑定或输入,因此使用了类。

这就是我的问题所在。我不能(没有过度杀戮)向TextEditor的实例添加绑定或输入手势。

所以我尝试使用的方法是删除或修改DeleteNextWord命令的“默认”键手势。

在查看.Net Reflector以了解命令的注册方式之后,我看到框架从资源获取与命令关联的密钥。

在我的例子中,手势“ctrl-delete”来自资源“ExceptionStringTable”中的键“KeyDeleteNextWord”(内部类型SR,静态构造函数)。

所以我的问题:

我可以在资源“ExceptionStringTable”中覆盖“KeyDeleteNextWord”的值吗?

或者,以更一般的方式:

如何全局修改标准WPF命令的默认手势?

如果需要,我很乐意提供更多信息。

谢谢。

1 个答案:

答案 0 :(得分:0)

我没有XamDataGrid,但我尝试使用常规TextBox。

tb.PreviewKeyDown += new KeyEventHandler(tb_KeyDown);
void tb_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.X && Keyboard.Modifiers == ModifierKeys.Control)
        {
            Trace.WriteLine("Ctrl+X");
            e.Handled = true;
        }
    }

该代码将绕过默认的“剪切”命令。

在您的项目中,您可能需要修改控件模板,然后使用TextEditor上的附加属性或行为来拦截击键并发送您自己的命令。