显示带有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
一起消失。
这是正常行为还是错误?
如果显示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));
}