Domanda

Per la mia applicazione WPF, sto archiviazione di vari impostazioni dell'utente come posizione della finestra, stato della finestra, e se non per visualizzare una finestra di benvenuto. Il problema è che mentre tutto sta caricando su, vedo un sacco di lampeggiare e lampeggiare come le finestre vengono caricati in, e poi più sfarfallio quando la finestra è massimizzata dopo aver letto nelle impostazioni.

Sono già utilizzando il built-in funzionalità splash screen WPF PNG, ma c'è un modo per nascondere completamente il rendering di tutte le finestre fino a quando tutto è a pieno carico in?

È stato utile?

Soluzione

Modificare l'Application.xaml, rimuovere lo StartupUri, invece impostare il gestore di eventi di avvio. In Application.xaml.cs, modificare il gestore di eventi di avvio per visualizzare lo splashscreen, caricare le tue risorse, creare tutto, quindi creare la finestra principale e mostrarlo.

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

E

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
}

Altri suggerimenti

Ci sono funzioni, BeginInit e EndInit, se si modificano le proprietà all'interno di queste funzioni come ..

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

allora la vostra finestra non renderà finché non viene chiamato l'EndInit (), non lampeggia.

È possibile impostare le finestre WindowState per Minimized, poi gestire l'evento ContentRendered e impostare il WindowState Normale o massimizzata.

Quando si verifica questo carico? Codice eseguito nel costruttore del Window principale dovrebbe eseguire prima della visualizzazione della finestra; se si carica tutte le risorse necessarie lì, non si dovrebbe vedere alcun sfarfallio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top