WPF keydown没有捕获转义?

时间:2016-03-06 14:59:03

标签: c# wpf keypress keydown

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();
    }
}

希望这可以解决任何问题,很抱歉不清楚这一点。

2 个答案:

答案 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();