フル装備までWPFウィンドウを非表示にします
-
18-09-2019 - |
質問
私のWPFアプリケーションでは、私は、ウィンドウの位置、ウィンドウ状態、および歓迎のダイアログを表示するかどうかのようないくつかのユーザー設定を格納しています。問題はすべてがアップロードしている間、私は窓を設定して読んだ後に最大化され、より多くのちらつきをウィンドウがでロードされているように点滅し、ちらつきの多くを見て、ということです。
私はすでに組み込みのWPF PNGスプラッシュスクリーン機能を使用していますが、すべてが完全にロードされるまで完全にすべてのウィンドウのレンダリングを非表示にする方法はありますか?
解決
StartUpUriを削除し、Application.xamlを編集し、代わりに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()が呼び出されるまで、それは点滅しません。
表示されませんこれで、ContentRenderedイベントを処理し、標準または最大化には、WindowStateを設定し、最小化するためにWindowsのWindowStateを設定することができます。
場合は、このロードは発生しますか。ウィンドウが表示される前にメインWindow
のコンストラクタで実行されるコードを実行する必要があります。あなたがそこにすべての必要なリソースをロードする場合は、任意のちらつきが表示されないはずです。
所属していません StackOverflow