2

我有一个应用程序,在创建主窗口之前显示了启动画面。如果用户在显示初始屏幕时关注了另一个应用程序,我想避免主窗口在创建时窃取焦点。

我的应用程序的启动如下所示:

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.ShowActivatedfalse,仅当初始屏幕失去焦点时。但这会导致异常:

InvalidOperationException:当 ShowActivated 为 false 且 WindowState 设置为 Maximized 时,无法显示 Window。

事实上,我的 MainWindow 设置WindowStateMaximized(从以前的会话设置恢复)。我不明白为什么该ShowActivated功能有这样的限制。我找不到有关此问题的任何文档。

我尝试强制WindowState何时为假NormalShowActivated它可以防止异常,但它也会激活窗口!也许改变窗口状态实际上会导致激活?

有什么技巧可以用来解决这个问题吗?我想将我的主窗口恢复为最大化状态,并且如果用户在启动屏幕期间将注意力从我的应用程序上移开,则主窗口不会将焦点从其他应用程序上窃取。

4

1 回答 1

0

我也有这个问题。

我尝试的第一件事是在创建并显示启动画面后重新激活主窗口。这将激活返回到主窗口并工作,但它看起来不是很优雅。

更好的解决方案是不要WindowState在初始屏幕上设置为最大化,而是手动最大化初始屏幕以使用互操作和 Windows 窗体覆盖整个屏幕,如下所述:

http://www.inveigledsoftware.com/2009/07/maximizing-a-wpf-window-with-windowstatenone/

于 2010-05-19T09:37:04.170 回答