在Application_Startup中显示窗口。 WPF

时间:2010-07-22 14:23:56

标签: .net wpf

我有一小段代码。

private void Application_Startup(object sender, StartupEventArgs e)
        {
            WndAbout ab = new WndAbout();
            ab.Show();
        }

并且希望在应用程序启动时显示窗口或对话框,然后才会加载其他模块。

但是!当我关闭显示的窗口时,后面启动的主窗口也会关闭!

我做错了什么?我试图制作Showdialog() - 同样的情况发生了。

2 个答案:

答案 0 :(得分:6)

您遇到的问题来自于WPF管理关机的方式。

您可以通过...

更改关机行为
Application.Current.ShutdownMode

......财产。将其更改为适当的值:

Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnLastWindowClose;

这会有所帮助。

另一种方式是手动将MainWindow - 属性设置为第二个窗口。

如果您只想制作启动画面,请使用自.net 3.51以来可用的启动画面选项。 IT的优势在于它在应用程序加载序列中很早就加载,比窗口早得多。

为此,请在项目资源管理器中打开图像的属性选项卡,并将构建操作设置为 SplashScreen


<强>更新

在我的一个应用程序中,我有一个设计,在显示主窗口之前还必须显示模态对话框。这时我不知道ShutdownMode - 属性。

我做的是我首先开始了一个对用户不可见的Window。这是第一个窗口,它还控制了app-livetime(WPF的默认行为)。从这个窗口出来,我打开了所需的对话框(一个显示模态的窗口)。如果此对话框已完成不成功,我终止了隐藏窗口并完全关闭了应用程序。如果对话结果正常,我创建了第一个MainWindow实例,用户可以使用。

答案 1 :(得分:2)

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
  ShutdownMode mode = this.ShutdownMode;
  this.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
  YourLogonWnd logon = new YourLogonWnd();
  logon.ShowDialog();
  if (!logon.DialogResult.HasValue || !logon.DialogResult.Value)
    this.Shutdown();
  else
    this.ShutdownMode = mode;
}

事实上,“OnMainWindowClose”最好在事件处理程序的末尾使用。