C# 在启动事件中显示多个窗口

C# 在启动事件中显示多个窗口,c#,wpf,xaml,C#,Wpf,Xaml,我有一个带有两个窗口的应用程序。我删除了App.xaml中的StartupUri。相反,我订阅了启动-事件来显示我的窗口 我的两个窗口分别称为Login和MainWindow 在启动-事件中,我有以下代码: private void App_OnStartup(object sender, StartupEventArgs e) { var login = new Login(); var dialogResult = login.ShowDialog(); if (di

我有一个带有两个窗口的应用程序。我删除了App.xaml中的
StartupUri
。相反,我订阅了
启动
-事件来显示我的窗口

我的两个窗口分别称为
Login
MainWindow

启动
-事件中,我有以下代码:

private void App_OnStartup(object sender, StartupEventArgs e)
{
    var login = new Login();
    var dialogResult = login.ShowDialog();
    if (dialogResult.HasValue && dialogResult.Value)
    {
        var mainWindow = new MainWindow();
        mainWindow.ShowDialog();
    }
}
启动应用程序时,会出现登录窗口。登录窗口上只有一个
按钮
。单击此
按钮
将执行以下代码:

private void ButtonClick(object sender, RoutedEventArgs e)
{
   DialogResult = true;
   Close();
}
我现在的期望是,单击登录窗口中的
按钮
,就会出现主窗口。相反,整个应用程序被终止

如果我在启动事件中的
If(dialogResult.HasValue&&dialogResult.Value)
设置断点,我可以输入括号,括号中的代码正在执行,但主窗口不会出现

你知道为什么会这样吗

我可以通过在登录窗口的Click事件中调用Main窗口来解决这个问题,如

var mainWindow = new MainWindow();
mainWindow.Show();
Close();

这是因为应用程序的ShutDown属性通常设置为“OnLastWindowClose”

因此,您必须在关闭登录窗口或更改Shutdown属性之前实例化Main窗口。

这可能很有趣。我认为它指出了一个与您所描述的类似的问题

基本上,打开的第一个窗口被视为应用程序的主窗口

我建议您将
main窗口
保留为默认窗口,并在
main窗口
Loaded
事件中打开登录窗口-如果登录不成功,则关闭主窗口(在它有机会打开之前)