我有一小段代码。
private void Application_Startup(object sender, StartupEventArgs e)
{
WndAbout ab = new WndAbout();
ab.Show();
}
并且希望在应用程序启动时显示窗口或对话框,然后才会加载其他模块。
但是!当我关闭显示的窗口时,后面启动的主窗口也会关闭!
我做错了什么?我试图制作Showdialog() - 同样的情况发生了。
答案 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”最好在事件处理程序的末尾使用。