Pregunta

Para mi aplicación WPF, estoy almacenando varias configuraciones del usuario como posición de la ventana, la ventana de estado, y si o no para mostrar un diálogo de bienvenida. El problema es que mientras todo está cargando, veo un montón de parpadear y el parpadeo ya que las ventanas son cargados en, y luego más parpadeante cuando la ventana está maximizada después de leer en la configuración.

Ya estoy usando la funcionalidad integrada pantalla de bienvenida WPF PNG, pero hay una manera de ocultar por completo la prestación de todas las ventanas hasta que todo esté totalmente cargado en?

¿Fue útil?

Solución

Editar el Application.xaml, retire la StartupUri, en lugar establecer el controlador de eventos de inicio. En Application.xaml.cs, edite el controlador de eventos de inicio para mostrar la pantalla de bienvenida, cargar sus recursos, crear todo, a continuación, crear la ventana principal y mostrarla.

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

Y:

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
}

Otros consejos

Existen funciones, BeginInit y EndInit, si cambia las propiedades dentro de estas funciones como ..

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

A continuación, la ventana no se rendirá hasta que el EndInit () se llama, no parpadean.

Puede configurar las ventanas Windowstate a minimizada, a continuación, controlar el evento ContentRendered y establecer el WindowState en Normal o maximizada.

¿Cuándo se produce esta carga? Código ejecutado en el constructor del Window principal debe ejecutar antes de que aparezca la ventana; si carga los recursos necesarios allí, no debería ver ningún parpadeo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top