C# WPF Fenster als "Hauptfenster" festlegen

Rooky420

Cadet 4th Year
Registriert
Nov. 2015
Beiträge
98
Hallo Community,

ist es Möglich das Hauptfenster in WPF zu ändern?

Man hat eine WPF Anwendung mit mehreren Fenstern.
Wenn man das StartUp Fenster schließt beendet sich die ganze Anwendung mit allen Fenstern wie es auch schon in Windows Forms war.
Was ist aber wenn ich nun z.B. ein Login Fenster als StartUp festgelegt habe und ich trotzdem mein Hauptfenster als Hauptfenster will?
Gibt es einen schöneren weg als:
Login.hide()
Hauptfenster.show()

und beim Closing Event vom Hauptfenster
Application.Exit() oder so was.
 
Also ich würde es so machen, dass du in der App.xaml die StartupUri entfernst und ein Event bei Startup hinzufügst, sodass in der App.xaml.cs eine neue Methode erstellt wird. In dieser Methode würde ich dann ein neues Objekt der Klasse "ApplicationController" instanziieren und die Application als Argument übergeben.
In ApplicationController im Konstruktor (oder einer Start-Methode) dann dein Programm steuern. Also z. B. das Login-Fenster öffnen und darauf warten, dass das Login-Fenster dem ApplicationController sagt, dass Login Ok ist. Wenn der Login Ok ist, das Fenster vom Controller aus schließen und danach das Hauptfenster öffnen. Beim Hauptfenster dann auf das Closing-Event warten und dementsprechend die Application dann herunterfahren. Vorher ggf. andere Fenster fragen, ob geschlossen werden darf.

ApplicationController.cs
Code:
public class ApplicationController {
  private readonly Application _application;

  public ApplicationController(Application application) {
    _application = application;
  }

  public void Start() {
    LoginWindow loginWindow = new LoginWindow();
    // Event, dass Login OK ist. Muss man nicht über Events machen, gibt viele Wege.
    loginWindow.LoginOk += (s, e) => { 
      loginWindow.Close();
      ShowMainWindow();
    }
    loginWindow.Show();
  }

  private void ShowMainWindow() {
    MainWindow mainWindow = new MainWindow();
    mainWindow.Closing += (s, e) => {
      _application.Shutdown();
    }
    mainWindow.Show();
  }
}

App.xaml.cs
Code:
public partial class App : Application
{
  protected override void OnStartup(StartupEventArgs e) {
    base.OnStartup(e);
    ApplicationController controller = new ApplicationController(this);
    controller.Start();
  }
}

Ich hoffe man kann es halbwegs verstehen. Code ist ungetestet aus dem Gedächtnis. Müsste aber Pi mal Daumen passen.
 
Zurück
Oben