关闭MainWindow后如何显示新窗口?

时间:2018-09-07 00:53:02

标签: c# .net wpf

我正在尝试执行本文中所述的操作,显示一个登录窗口,当用户成功登录后,关闭它并打开应用程序的主窗口。

If the user logs on successfully, then I want to show the main window, if not, I want to exit the application

但是提供的答案(在发布此问题时)对我不起作用,因为我的显示窗口的代码正在App.cs中运行。

我知道原因,因为启动的第一个窗口自动设置为应用程序的MainWindow,并且当我在其上调用Close()时,它退出应用程序。因此,第二个窗口没有机会打开。

我的问题是如何克服这个问题?还是这不是我所描述的方式?

public partial class App : Application
{
    public App(){}

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        LoginScreen f = new LoginScreen(); //becomes automatically set to application MainWindow
        var result = f.ShowDialog(); //View contains a call to Close()

        if (result == true) //at this point the LoginScreen is closed
        {
            MainWindow main = new MainWindow(); 
            App.Current.MainWindow = main;
            main.Show(); //no chance to show this, application exits
        }
    }
}

2 个答案:

答案 0 :(得分:5)

您可以将应用程序关闭模式更改为OnExplicitShutdown,然后在需要时调用Application.Shutdown(0)。例如:

public App()
{
    App.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
}

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    if (MessageBox.Show("Continue?", "", MessageBoxButton.YesNo) == MessageBoxResult.No)
        App.Current.Shutdown(0);
}

在构造函数中,我正在更改应用程序关闭模式,并在需要时调用关闭方法。

警告::当您更改ShutdownMode时,请确保调用Shutdown方法,否则即使关闭主窗口,您的应用程序也会在内存中。我已经在MainWindow中覆盖了OnClosed方法来做到这一点:

protected override void OnClosed(EventArgs e)
{
    base.OnClosed(e);
    App.Current.Shutdown(0);
} 

答案 1 :(得分:0)

App.xaml :(在此文件中,设置带有登录视图的开始窗口)

StartupUri="LoginWindow.xaml"

LoginWindow.xaml :(具有登录窗口视图的文件)

LoginWindow.xaml.cs :(视图的代码。在此放置分配给登录的功能。)

private void Login_Click(object sender, RoutedEventArgs e)
{
    //Access control. If correct, go ahead. Here you must create a condition check

    MainWindow main = new MainWindow();
    main.Show();

    this.Close();
}