对于我的WPF应用程序,我存储了几个用户设置,如窗口位置、窗口状态以及是否显示欢迎对话框。问题是,在所有内容加载完成之前,我看到很多闪烁和闪烁,当窗口在读取设置后最大化时,会出现更多的闪烁。
我已经使用内置的WPF PNG启动屏幕功能,但是否有一种方法可以完全隐藏所有窗口的渲染,直到所有内容完全加载完成?
对于我的WPF应用程序,我存储了几个用户设置,如窗口位置、窗口状态以及是否显示欢迎对话框。问题是,在所有内容加载完成之前,我看到很多闪烁和闪烁,当窗口在读取设置后最大化时,会出现更多的闪烁。
我已经使用内置的WPF PNG启动屏幕功能,但是否有一种方法可以完全隐藏所有窗口的渲染,直到所有内容完全加载完成?
编辑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
}
有两个函数,BeginInit和EndInit,如果你在这些函数内部更改属性,比如...
BeginInit();
...
... // Do your code Initialization here...
...
EndInit();
如果不调用EndInit(),你的窗口将不会渲染,也不会闪烁。
这个加载是在什么时候发生的?在主Window
构造函数中执行的代码应该在窗口显示之前执行;如果您在那里加载任何必需的资源,您就不应该看到任何闪烁。