wpf - App xaml antager det første vindue instantiated er hovedvinduet (showdialog ignoreres), jeg skal vise flere vinduer

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har følgende kode i min App.xaml.cs


private void App\_Start(object sender, StartupEventArgs e)
{
  if ( CompletedInstall())
  {
    //using show to allow for pacifier if loading is slow
    var manager = new WINServiceConfig();
    MainWindow = manager;
    manager.ShowDialog();
  }
}

private bool CompletedInstall()
{
    var window = new Initialize();
    window.ShowDialog();
    return window.DoLaunchManager;
}


og følgende i App.xaml


<Application x:Class="Manager.App"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Startup="App\_Start">


Når jeg kommenterer linjen, der kontrollerer CompletedInstall () , fungerer manager.ShowDialog () fint, og mit konfigurationsvindue viser.
Når CompletedInstall () kaldes opkaldet til manager.ShowDialog () returneres med det samme uden at vise vinduet. Jeg tilføjede hovedvinduet på den antagelse, at et sted langs linjen nogen besluttede en app, bør kun vise et vindue.


Jeg fandt en løsning ved at indstille hovedvinduet før du kalder CompletedInstall


        private void App\_Start(object sender, StartupEventArgs e)
        {
          var manager = new WINServiceConfig();
          MainWindow = manager;

          if (CompletedInstall())
          {
            manager.ShowDialog();
          }


men det tvinger mig til at udvikle WINServiceConfig (specifikt konstruktøren) baseret på dets brug, fordi det ikke kan regne med, at forudsætningerne er afsluttet. Dette er dårlig form. Hvad andet kan jeg gøre for at komme rundt om dette problem?


Dummy vindue? Det kan ikke være det bedste svar. Kan det?

Bedste reference


Du skal indstille ShutdownMode til OnExplicitShutdown (i det mindste mens du viser den indledende dialog).