我在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();
}
}
答案 0 :(得分: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();
}
}
这将阻止其他窗口在已经处理完事件时获取该事件。看看,当按下退出键时,两个窗口都收到消息,并且您没有告诉主窗口(即当前窗口后面的那个)不处理它,发生了什么。 强>
答案 1 :(得分:1)
您的窗口名称为Mahale
,或者要从主窗口关闭它,您应该致电:
Mahale.Close();
如果您在主表单中调用this.Close();
,程序退出
答案 2 :(得分:0)
您可以使用this.Hide()隐藏该窗口,但该窗口仍然存在。
答案 3 :(得分:0)
我认为实现目标的最佳方法是使用Button的IsCancel属性。
您可以将取消按钮上的IsCancel属性设置为true, 导致取消按钮自动关闭对话框 处理Click事件。
有关示例,请参阅here。
答案 4 :(得分:-1)
做:
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
this.Hide();
}
}
代替。
关闭()关闭每一帧。使用hide()。