我有一把Caliburn。微引导程序,我使用OnStartup()
检查视图的东西,然后调用DisplayRootViewFor<IShell>
。在某些场景中,我必须让用户在根视图启动之前做出重要决定或显示一些警告。我可以使用WindowManager.ShowDialog()
。
但是这里有一个问题:当我在根视图之前没有显示窗口时,所有工作都像预期的那样。
当我在根视图之前显示一个窗口时,DisplayRootViewFor()
调用被发出,但应用程序立即终止。
我猜这是因为当我使用窗口管理器在窗口获得根视图并关闭之前显示窗口时,它使WPF应用程序认为其主窗口已关闭并自动终止。
那么我如何在根视图之前显示(模态)窗口?
我发现一个可能的解决方案是:
设置Application.ShutdownMode
为OnExplicitShutdown
。然后我必须跟踪何时真正关闭应用程序,例如当shell关闭时,我必须显式调用System.Windows.Application.Current.Shutdown();
。
我很好奇是否还有另一种方式,但我猜当模态窗口关闭时,WPF应用程序中的窗口数量下降到0,无论不久后是否建立了新的主窗口,都会触发关闭。
你可以关闭你的shell视图,因为shell视图是主窗口,如果用户关闭它意味着他们想要关闭exe。
private void ShellView_OnClosed(object sender, EventArgs e)
{
Application.Current.Shutdown();
}
如果其他人有这个问题,我解决它重写OnActivate方法像这样:
protected override void OnActivate()
{
_windowManager.ShowDialog(YOUR_WINDOW);
base.OnActivate();
}
因此,您不必设置Application。关闭模式OnExplicitShutdown,你的应用程序正常工作