我制作了一个独立的应用程序,为研究目的进行一些工程分析。这是为了显示图形显示结果在另一个窗口(我不知道它是什么正确的词。我称之为子窗口)链接到主窗口。为了提醒最终用户在关闭主窗口之前保存输入文件,我在后面添加了一个代码,如下所示:
private void Window_Closing(object sender, CancelEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Please Be Sure That Input & Output Files Are Saved. Do You Want To Close This Program?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.Yes)
{
Application.Current.Shutdown();
}
else
{
e.Cancel = true;
}
}
XAML代码是:
<Window x:Class="GMGen.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Icon="Icon1.ico"
Title="GMGen" WindowState="Maximized" Closing="Window_Closing" >
<DockPanel x:Name="RootWindow">
<ContentControl Content="{Binding CurrentPage}" />
<Grid >
</Grid >
</DockPanel>
当我关闭主窗口而不打开任何显示图形的子窗口时,它工作正常。弹出通知窗口并单击“是”,然后程序终止。但是,如果我打开&amp;在关闭主窗口之前关闭子窗口,事情变得有些奇怪。弹出通知。单击是,程序未终止。相反,会弹出另一个通知。单击是,然后弹出另一个。这件事发生在我打开和关闭子窗口的大致相同的时间。即如果我打开和关闭子窗口四次,通知会出现四到五次。我不知道是什么原因引起了这个问题。我只想一次显示消息框。如果您有任何人都知道解决方案,请告诉我。我非常感谢你的帮助。
答案 0 :(得分:1)
很有可能你在每个窗口都订阅了关闭事件,因为它会触发N次。
如果没有看到您的实际实施,很难说出解决问题的最佳选择。这是通过使用静态标志进行确认来处理它的一种方法。显示确认后,flag将阻止后续弹出。
private static bool _isConfirmed = false;
private void Window_Closing(object sender, CancelEventArgs e)
{
if (!_isConfirmed)
{
MessageBoxResult result = MessageBox.Show("Please Be Sure That Input & Output Files Are Saved. Do You Want To Close This Program?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.Yes)
{
Application.Current.Shutdown();
}
else
{
e.Cancel = true;
}
_isConfirmed = true;
}
}