我如何在WPF中顺序显示窗口?

3

我在 App.xaml.cs 中有以下代码:

    protected override void OnStartup(StartupEventArgs e)
        {
        var window = new WelcomeWindow();
        if (window.ShowDialog() == true)
            {
            var mainWindow = new MainWindow();
            mainWindow.ShowDialog();
            }
        }

第二个窗口没有显示出来。相反,当欢迎窗口关闭时,应用程序会直接关闭。我该如何确保第一个窗口关闭后可以显示第二个窗口?

欢迎窗口在做什么? - paparazzo
欢迎窗口是否需要进行登录?app.xaml中的StartupUri值是什么? - potehin143
2个回答

4
这是由于Application.ShutdownMode的默认值是OnLastWindowClose。这意味着当你的WelcomeWindow关闭时,应用程序将关闭且不再显示任何内容。
为了解决这个问题,将ShutdownMode设置为OnExplicitShutdown,如果您想退出应用程序,则显式调用Shutdown
public App()
{
    this.ShutdownMode = ShutdownMode.OnExplicitShutdown;
}

1

如果在MainWindow的Initialized事件中显示WelcomeWindow,并且如果Dialog不为true,则关闭上一个窗口。这样可以让MainWindow保持应用程序的主窗口。

    private void Window_Initialized(object sender, EventArgs e)
    {
        // at this moment MainWindow is Initialized but still nonvisible
        if ((new WelcomeWindow()).ShowDialog()!=true)
        {
            this.Close();
        }
    }

当你加载任何窗口 Application_Startup 时,它将变成应用程序的主窗口。并且它会在此窗口关闭时关闭。 我已经检查过了,即使你在 app.xaml 中设置了 StartupUri="MainWindow.xaml",如果其他窗口已经在 Application StartUp 事件中显示,它也没有任何效果。 你可以自己实现。只需在第一个加载的窗口 Loaded 事件处理程序上设置断点,并在调试器中查看 "Aplication.Current.MainWindow == this" 表达式结果。它将为 true。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接