显示带有SplashScreen的WPF MessageBox的非模态行为–错误

本文关键字:模态 错误 MessageBox SplashScreen WPF 显示 | 更新日期: 2023-09-27 18:20:28

假设我们有以下代码:

    void App_Startup(object sender, StartupEventArgs args)
    {
        MessageBox.Show("something");
    }

当应用程序启动时调用:

    <Application x:Class="AppClass.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 Startup="App_Startup"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
        </Application.Resources>
    </Application>

当我在没有SplashScreen的情况下运行它时,它会按预期运行(即等待单击OK),但当与SplashScreen一起运行时,消息框会与SplashScreen一起消失。

这是正常行为还是错误?

显示带有SplashScreen的WPF MessageBox的非模态行为–错误

如果显示MessageBox而没有显式设置父级,则会发生这种情况。该窗口将隐式地从当前活动的任何窗口(在本例中为启动屏幕)中创建父窗口。在Win32世界中,如果关闭一个窗口,那么所有子窗口也将关闭。如果显式地将MessageBox的父窗口设置为另一个窗口,那么就可以了。

这已经在这里向微软报告,并在这里讨论了可能的补救措施。

试试这个,

SplashScreen Show(false,false)方法的第二个参数是指定SplashScreen是否应该位于顶部。

void App_Startup(object sender, StartupEventArgs args)
{
   SplashScreen screen = new SplashScreen("SplashImage.png");
   screen.Show(false, false);
   MessageBox.Show("something");
   splashScreen.Close(TimeSpan.FromSeconds(1));
}