我希望捕获删除键按下,并在按下键时不执行任何操作。如何在WPF和Windows窗体中执行此操作?
答案 0 :(得分:28)
将MVVM与WPF一起使用时,您可以使用输入绑定捕获XAML中的按键。
<ListView.InputBindings>
<KeyBinding Command="{Binding COMMANDTORUN}"
Key="KEYHERE" />
</ListView.InputBindings>
答案 1 :(得分:17)
对于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中是一样的
答案 2 :(得分:3)
我不了解WPF,但是为Winforms尝试KeyDown
事件而不是KeyPress
事件。
请参阅Control.KeyPress上的MSDN article,特别是短语“KeyPress事件不是由非字符键引发的;但是,非字符键确实会引发KeyDown和KeyUp事件。”
答案 3 :(得分:2)
只需检查特定控件上的key_press
或Key_Down
事件处理程序,然后检查WPF:
if (e.Key == Key.Delete)
{
e.Handle = false;
}
对于Windows窗体:
if (e.KeyCode == Keys.Delete)
{
e.Handled = false;
}
答案 4 :(得分: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
}
}
}