近期发现CAD的原生窗体都是使用ESC关闭窗体,而我创建的WPF窗体不能使用ESC关闭,经过多方面的查找总结了一下方法

/// <summary>
/// 添加Esc退出
/// </summary>
/// <param name="window">wpf窗体</param>
public static void AddEscQuit(this Window window)
{
    //移除事件避免重复
    window.KeyDown -= Window_KeyDown_Esc;
    //添加事件
    window.KeyDown += Window_KeyDown_Esc;
    //关闭时移除事件
    window.Closed -= WindowOnClosed;
    window.Closed += WindowOnClosed;
}

/// <summary>
/// 关闭时减掉事件
/// </summary>
private static void WindowOnClosed(object? sender, EventArgs e)
{
    if (sender is not Window window)
        return;
    window.KeyDown -= Window_KeyDown_Esc;
    window.Closed -= WindowOnClosed;
}

/// <summary>
/// ESC关闭窗体
/// </summary>
private static void Window_KeyDown_Esc(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key != Key.Escape
        || sender is not Window { IsLoaded: true, IsActive: true } window)
        return;

    // 判断没有按住ctrl或shift或alt才执行
    var keys = Control.ModifierKeys;
    if ((keys & Keys.Control) != 0
        || (keys & Keys.Shift) != 0
        || (keys & Keys.Alt) != 0)
        return;
    window.Close();
}

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐