我想捕获删除按键并且在按键被按下时什么都不做。如何在 WPF 和 Windows 窗体中做到这一点?
问问题
53456 次
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
事件而不是KeyPress
Winforms 的事件。
请参阅有关 Control.KeyPress 的MSDN 文章,特别是短语“非字符键不会引发 KeyPress 事件;但是,非字符键会引发 KeyDown 和 KeyUp 事件。”
于 2010-05-23T21:35:36.673 回答
2
只需检查特定控件上的key_press
或Key_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 回答