“取消”按钮背后的基本思想是使用Escape按键关闭窗口。



来源:WPF编程(Griffith,Sells)

所以这应该工作

<Window>
<Button Name="btnCancel" IsCancel="True">_Close</Button>
</Window>

但是,我期望的行为对我来说没有效果。父窗口是由Application.StartupUri属性指定的主应用程序窗口。有效的是
<Button Name="btnCancel" IsCancel=True" Click="CloseWindow">_Close</Button>

private void CloseWindow(object sender, RoutedEventArgs)
{
    this.Close();
}
  • 基于窗口是普通窗口还是对话框,IsCancel的行为是否有所不同?仅在调用ShowDialog时,IsCancel才能像广告中那样工作吗?
  • 按钮是否需要显式Click处理程序(IsCancel设置为true)才能关闭Escape打印机上的窗口?
  • 最佳答案

    是的,它仅适用于对话框,因为普通窗口没有“取消”的概念,它与DialogResult.Cancel从WinForms中的ShowDialog返回相同。

    如果要用转义符关闭窗口,则可以在窗口的PreviewKeyDown中添加一个处理程序,选择是否为Key.Escape并关闭表单:

    public MainWindow()
    {
        InitializeComponent();
    
        this.PreviewKeyDown += new KeyEventHandler(CloseOnEscape);
    }
    
    private void CloseOnEscape(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Escape)
            Close();
    }
    

    08-28 13:15