xaml文件
PreviewKeyDown="Window_KeyDown"
.cs文件
private void Window_KeyDown(object sender, KeyEventArgs e)
{
System.Windows.Forms.MessageBox.Show(e.Key.ToString());
if (e.Key == Key.Escape)
{
this.Close();
}
}
KeyPreview设置为true,但ESC键不显示消息框。 (消息框确实显示其他“普通”键,例如0-9和a-z)。我如何解决这个问题或找到一种在ESC上触发某事的方法?
修改
Win.xaml
<Window x:Class="WindowsFormsApplication5.Win"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowStyle="None"
PreviewKeyDown="Window_KeyDown">
</Window>
Win.xaml.cs
public partial class Win : Window
{
public Win()
{
InitializeComponent();
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
System.Windows.MessageBox.Show(e.Key.ToString());
if (e.Key == Key.Escape)
{
this.Close();
}
}
}
Form1.cs的
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Win scrn = new Win();
scrn.Show();
}
}
希望这可以解决任何问题,很抱歉不清楚这一点。
答案 0 :(得分:0)
也许WPF MessageBox与相关
对我来说这很好用
<Window PreviewKeyDown="wPreviewKeyDown"
private void wPreviewKeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show(e.Key.ToString());
if (e.Key == Key.Escape)
this.Close();
}
你有另一个可能处理事件的控件吗?
答案 1 :(得分:0)
如果从WinForms表单中运行WPF对话框,则Escape键似乎被过滤掉。这是一个修复:
var wpfWindow = new SomeWpfWindow();
ElementHost.EnableModelessKeyboardInterop(wpfWindow);
wpfWindow.Show();