2014-09-03 30 views
0

假设我们有下面的代码:用SplashScreen显示的WPF MessageBox的非模态行为 - bug?

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一起消失。

这是正常行为还是错误?

+0

*这是一个正常的行为或错误?* ...我们如何回答,除非你显示如何打开你的启动画面? – Sheridan 2014-09-03 16:22:16

+0

你如何显示启动画面?通过设置图像属性? – Kurubaran 2014-09-03 16:22:35

+0

通过VS添加普通.jpg并将'Build Action'设置为'SplashScreen'。然后通过Ctrl + F5运行代码 – user2341923 2014-09-03 16:24:45

回答

2

如果您显示一个MessageBox并且没有显式设置父级,则会发生这种情况。该窗口将隐式地将它自己关闭,无论哪个窗口当前处于活动状态(在本例中为启动画面)。在Win32世界中,如果你关闭一个窗口,那么所有的子窗口也将被关闭。如果你明确地设置MessageBox的父窗口到另一个窗口,那么你会没事的。

这已报告给microsoft here并且可能的补救措施已被讨论here

1

试试这个,闪屏显示的

第二个参数(假,false)方法是指定在启动画面是否应该是最顶端。

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)); 
}