在Startup-Event中显示多个窗口

本文关键字:窗口 显示 Startup-Event | 更新日期: 2023-09-27 18:13:44

我有一个应用程序与2个Windows。我在App.xaml中删除了StartupUri。相反,我订阅了Startup -Event来显示我的Windows。

我的两个窗口叫做LoginMainWindow

Startup -Event中,我有以下代码:

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();
    }
}

当我启动我的应用程序登录窗口出现。在登录窗口上只有一个Button。当点击这个Button时,将执行以下代码:

private void ButtonClick(object sender, RoutedEventArgs e)
{
   DialogResult = true;
   Close();
}

我的期望是现在,在登录窗口点击Button主窗口出现。相反,整个应用程序被终止。

如果我在if (dialogResult.HasValue && dialogResult.Value)的StartUp-Event中设置了一个断点,我可以输入括号,括号中的代码正在执行,但是主窗口没有出现。

知道为什么会这样吗?

我可以通过在登录窗口的点击事件中调用主窗口来解决这个问题。

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

在Startup-Event中显示多个窗口

你可能会感兴趣。它指向的参考文献,我认为它描述了一个类似于你所描述的问题。

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

我建议你应该把你的MainWindow作为默认值,并在MainWindowLoaded事件中打开你的登录窗口-如果登录不成功,那么关闭主窗口(在它有机会打开之前)。

这是因为你的应用程序的关闭属性通常设置为"OnLastWindowClose"。

所以,你必须在你的登录窗口被关闭之前实例化你的主窗口或者改变Shutdown-Property