8

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

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

4

4 回答 4

11

编辑 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
}
于 2009-09-27T15:52:25.323 回答
5

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

于 2012-10-22T18:57:53.530 回答
3

如果您更改这些函数中的属性,例如......

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

那么在调用 EndInit() 之前,您的窗口不会呈现,它不会闪烁。

于 2009-09-27T11:08:10.263 回答
0

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

于 2009-09-27T15:56:54.533 回答