WPF在主窗口之前关闭辅助窗口

时间:2017-07-05 09:35:58

标签: wpf

我在WPF应用程序中有2个窗口,如果我关闭主要窗口,我也想关闭另一个窗口。

我通过在App.xaml中设置来实现这一目的:

ShutdownMode="OnMainWindowClose"

2个窗口有一个Window_Closing事件,我在其中取消初始化某些组件。现在我想要实现的是:如果我关闭MainWindow,第二个窗口的Window_Closing事件必须在Main的关闭事件之前执行,因为第二个窗口的de-init必须在之前执行首先。关于如何实现这一点的任何想法?

3 个答案:

答案 0 :(得分:2)

使用this集合。它包含应用程序所有窗口的列表;你可以遍历它们并对它们进行操作。

在这种情况下,您可以写:

public void MainWindow_Closing(object sender, CancelEventArgs e)
{
    foreach (Window w in Application.Current.Windows)
    {
        if (w.Title == "Secondary Window") // <-- or whatever check you want to identify the secondary Window
        {
            w.Close();
            break;
        }
    }
}

这使您可以获得灵活的行为,例如,您可以关闭所有辅助窗口,而不仅仅是一个。

答案 1 :(得分:1)

你能从主窗口Window_Closing事件中调用第二个窗口的Close()函数吗?

void MainWindow_Closing(object sender, CancelEventArgs e)
{
    secondaryWindow.Close();

    ...
}

答案 2 :(得分:1)

关闭MainWindow事件处理程序中Closing的所有窗口。这应该有效:

void MainWindow_Closing(object sender, CancelEventArgs e)
{
    foreach (Window w in Application.Current.Windows)
    {
        if (w != this)
            w.Close();
    }

    //handle clean up for MainWindow here...
}

您可能还想考虑处理Application.Current.Exit事件以在一个地方执行所有窗口的清理。