2

我在 wpf 中有一个窗口,我想在退出按钮上关闭窗口。所以我在 PreviewKeyDown 事件上写了这段代码,但它关闭了整个应用程序,包括主窗口和当前窗口。我只想关闭当前窗口。

 //this code for open second window
 private void M_Mahale_Click(object sender, RoutedEventArgs e)
    {
        Tanzimat.MahaleWin Mahale = new Tanzimat.MahaleWin();
        Mahale.ShowDialog();
    }
  //this code for PreviewKeyDown event on second window and current window
 private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Escape)
        {
            this.Close();
        }
    }        
4

5 回答 5

6

好的,根据此评论//this code for PreviewKeyDown event on second window and current window,您在两个窗口中都有相同的代码 - 所以在PreviewKeyDown两个窗口中将代码更改为:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Escape)
    {
        e.Handled = true;
        this.Close();
    }
}

这将阻止其他窗口在已经处理事件时获得该事件。看,发生的事情是当按下转义键时,两个窗口都收到了消息,而你没有告诉主窗口(即当前窗口后面的那个)不要处理它。

于 2013-04-24T14:54:04.010 回答
1

您的窗口有一个名称Mahale和/或从主窗口关闭它的命令,您应该调用:

 Mahale.Close();

如果您this.Close();以 main 形式调用程序退出是很自然的

于 2013-04-24T15:33:36.143 回答
0

您可以使用 this.Hide() 隐藏该窗口,但该窗口仍然存在。

于 2013-04-24T14:50:08.897 回答
0

我认为实现目标的最佳方法是使用 Button 的 IsCancel 属性。

您可以将 Cancel 按钮上的 IsCancel 属性设置为 true,从而使 Cancel 按钮自动关闭对话框而不处理 Click 事件。

有关示例,请参见此处

于 2013-04-24T15:29:17.970 回答
-1

做 :

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Escape)
    {
        this.Hide();
    }
}

反而。

Close() 关闭每一帧。使用隐藏()。

于 2013-04-24T14:50:22.937 回答