11

我想捕获删除按键并且在按键被按下时什么都不做。如何在 WPF 和 Windows 窗体中做到这一点?

4

5 回答 5

31

将 MVVM 与 WPF 一起使用时,您可以使用输入绑定在 XAML 中捕获按键。

            <ListView.InputBindings>
                <KeyBinding Command="{Binding COMMANDTORUN}"
                            Key="KEYHERE" />
            </ListView.InputBindings>
于 2012-09-10T05:18:15.460 回答
18

对于 WPF 添加KeyDown处理程序:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
        MessageBox.Show("delete pressed");
        e.Handled = true;
    }
}

这与 WinForms几乎相同:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Delete)
    {
        MessageBox.Show("delete pressed");
        e.Handled = true;
    }
}

并且不要忘记打开KeyPreview

如果您想阻止按键默认操作被执行e.Handled = true,如上图所示。在 WinForms 和 WPF 中是一样的

于 2010-05-23T21:49:10.363 回答
3

我不了解 WPF,但请尝试使用KeyDown事件而不是KeyPressWinforms 的事件。

请参阅有关 Control.KeyPress 的MSDN 文章,特别是短语“非字符键不会引发 KeyPress 事件;但是,非字符键会引发 KeyDown 和 KeyUp 事件。”

于 2010-05-23T21:35:36.673 回答
2

只需检查特定控件上的key_pressKey_Down事件处理程序,然后检查 WPF:

if (e.Key == Key.Delete)
{
   e.Handle = false;
}

对于 Windows 窗体:

if (e.KeyCode == Keys.Delete)
{
   e.Handled = false;
}
于 2010-05-24T07:23:51.447 回答
1

我尝试了上面提到的所有东西,但对我没有任何作用,所以我发布了我实际所做和工作的内容,希望能帮助其他与我有同样问题的人:

在 xaml 文件的代码隐藏中,在构造函数中添加一个事件处理程序:

using System;
using System.Windows;
using System.Windows.Input;
public partial class NewView : UserControl
    {
    public NewView()
        {
            this.RemoveHandler(KeyDownEvent, new KeyEventHandler(NewView_KeyDown)); 
            // im not sure if the above line is needed (or if the GC takes care of it
            // anyway) , im adding it just to be safe  
            this.AddHandler(KeyDownEvent, new KeyEventHandler(NewView_KeyDown), true);
            InitializeComponent();
        }
     //....
      private void NewView_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Delete)
            {
                //your logic
            }
        }
    }
于 2019-07-15T09:04:31.710 回答