隐藏WPF窗口直到完全加载

时间:2009-09-27 10:53:56

标签: c# wpf loading splash-screen

对于我的WPF应用程序,我存储了几个用户设置,如窗口位置,窗口状态以及是否显示欢迎对话框。问题是,当所有东西都加载时,我看到窗口加载时闪烁和闪烁很多,然后在读取设置后窗口最大化时闪烁更多。

我已经在使用内置的WPF PNG启动画面功能,但有没有办法完全隐藏所有窗口的渲染,直到所有内容都完全加载?

4 个答案:

答案 0 :(得分:10)

编辑Application.xaml,删除StartUpUri,而不是设置StartUp事件处理程序。 在Application.xaml.cs中,编辑启动事件处理程序以显示启动画面,加载资源,创建所有内容,然后创建主窗口并显示它。

<Application
    ...
    StartUp="OnStartUp"
    />

private void OnStartUp(Object sender, StartupEventArgs e)
{
    var settings = LoadSettingsFrom... // Call your implementation of load user settings

    // Example only, in real app do this if's section on a different thread
    if (settings.doShowSplashScreen)
    {
        var splashScreen = new SplashScreen();
        splashScreen.Show();
    }

    // Load and create stuff (resources, databases, main classes, ...)

    var mainWindow = new mainWindow();
    mainWindow.ApplySettings(settings); // Call your implementation of apply settings

    if (doShowSplashScreen)
    {
        // send close signal to splash screen's thread
    }

    mainWindow.Show(); // Show the main window
}

答案 1 :(得分:3)

如果你改变这些函数中的属性,有函数,BeginInit和EndInit,如..

BeginInit();
...
... // Do your code Initialization here...
...
EndInit();

然后在调用EndInit()之前你的窗口不会渲染,它不会闪烁。

答案 2 :(得分:3)

您可以将Windows WindowState设置为Minimized,然后处理ContentRendered事件并将WindowState设置为Normal或Maximized。

答案 3 :(得分:0)

这种加载何时发生?在主Window的构造函数中执行的代码应该在显示窗口之前执行;如果你在那里加载任何所需的资源,你不应该看到任何闪烁。