8

私のWPFアプリケーションでは、ウィンドウの位置、ウィンドウの状態、ウェルカムダイアログを表示するかどうかなどのいくつかのユーザー設定を保存しています。問題は、すべてがロードされている間、ウィンドウがロードされるときに多くの点滅とちらつきが見られ、設定を読み込んだ後にウィンドウが最大化されるとさらにちらつきが発生することです。

組み込みのWPFPNGスプラッシュ画面機能をすでに使用していますが、すべてが完全に読み込まれるまで、すべてのウィンドウのレンダリングを完全に非表示にする方法はありますか?

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とEndInitの関数があります。

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

その場合、EndInit()が呼び出されるまでウィンドウはレンダリングされず、ちらつきません。

于 2009-09-27T11:08:10.263 に答える
0

この読み込みはいつ発生しますか?メインWindowのコンストラクターで実行されるコードは、ウィンドウが表示される前に実行する必要があります。そこに必要なリソースをロードすると、ちらつきは見られないはずです。

于 2009-09-27T15:56:54.533 に答える