我有一个在创建主窗口之前显示启动画面的应用程序。如果用户在显示初始屏幕时聚焦了另一个应用程序,我想避免主窗口在创建焦点时窃取焦点。
我的应用程序的启动看起来像这样:
private void Application_Startup(object sender, StartupEventArgs e)
{
SplashScreenService.Start();
// Initializing stuff...
...
// Ready to open the main window.
MainWindow mainWindow = MainWindow();
mainWindow.ShowActivated = SplashScreenService.HasFocus();
mainWindow.ShowDialog();
}
为防止主窗口被激活,我将Window.ShowActivated
设置为false
,仅当启动画面失去焦点时才会这样做。但这会导致异常:
InvalidOperationException:当ShowActivated为false且WindowState设置为Maximized时,无法显示Window。
确实,我的MainWindow将WindowState
设置为Maximized
(从以前的会话设置恢复)。我不明白为什么ShowActivated
功能存在这样的限制。我找不到任何关于这个问题的文档。
当WindowState
为false时,我尝试强制Normal
到ShowActivated
,并且它会阻止异常,但它也会激活窗口!也许改变窗口状态实际上会导致激活?
我可以用它来解决这个问题吗?我希望以最大化状态恢复主窗口,如果用户在启动画面期间远离我的应用程序,则不要让主窗口远离其他应用程序。
答案 0 :(得分:0)
我也有这个问题。
我尝试的第一件事是在创建和显示启动画面后重新激活主窗口。这将激活返回到主窗口并且工作但它看起来不是很优雅。
更好的解决方案是不要在启动屏幕上设置WindowState
以使其最大化,而是使用互操作和Windows窗体手动最大化启动屏幕以覆盖整个屏幕,如下所述:
http://www.inveigledsoftware.com/2009/07/maximizing-a-wpf-window-with-windowstatenone/