2017-05-18 1 views
1

Ich habe eine Anwendung, die das Startfenster für die Anmeldung hat, wenn die Anmeldung korrekt ist, öffnet es das Hauptfenster der Anwendung.App Hauptfenster, wie ist es und die Hauptanwendung davon?

Wenn das Login korrekt ist, öffne ich das Fenster auf diese Weise (I MVVM Muster verwenden):

PrincipalViewModel miPrincipalViewModel = new PrincipalViewModel(); 
PrincipalView miPrincipalView = new PrincipalView(); 
miPrincipalView.DataContext = miPrincipalViewModel; 

App.Current.MainWindow.DataContext = null; 
App.Current.MainWindow.Close(); 

miPrincipalView.Show(); 

In diesem Fall habe ich nicht setze das neue Hauptfenster. Eine weitere Option ist dieser Code:

PrincipalViewModel miPrincipalViewModel = new PrincipalViewModel(); 
PrincipalView miPrincipalView = new PrincipalView(); 
miPrincipalView.DataContext = miPrincipalViewModel; 

App.Current.MainWindow.DataContext = null; 
App.Current.MainWindow.Close(); 

App.Current.MainWindow = miPrincipalView; 
miPrincipalView.Show(); 

In diesem zweiten Fall, habe ich das Hauptfenster Eigenschaft in das Hauptfenster der Anwendung, da das Login-Fenster geschlossen ist.

Aber ich sehe keinen Unterschied im Verhalten in beiden Fällen, also frage ich mich, was wirklich MainWindow ist und die Verwendung und Bedeutung hat.

Vielen Dank.

+0

Wird die Anwendung im ersten Fall geschlossen? –

+0

Ja, in beiden Fällen, wenn ich auf die Schaltfläche "X" klicke, wird die Anwendung geschlossen. Ich kann im Task-Manager sehen, dass die Anwendung nicht ausgeführt wird, nachdem Sie auf die Schaltfläche "X" geklickt haben. –

Antwort

2

Im ersten Fall, dass Sie nicht mehr über eine tatsächliche Mainwindow aber das sollte kein Problem sein, wenn Sie auf der Application.Current.MainWindow Eigenschaft verlassen, um eine gültige Referenz auf ein Fenster irgendwo in der Anwendung oder wenn Sie zurückkommen Setzen Sie die Eigenschaft Application.ShutdownMode auf OnMainWindowClose.

Der Standardwert ist OnLastWindowClose, was bedeutet, dass Ihre Anwendung wie erwartet heruntergefahren wird, wenn Sie das neue Fenster trotzdem schließen.

Wie die Dokumentation auf MSDN sagt "die Lebensdauer einiger Anwendungen möglicherweise nicht abhängig sein, wenn das Hauptfenster oder das letzte Fenster geschlossen ist, oder möglicherweise nicht abhängig von Windows.".

1

Hier ist ein Teil über das, was von App.Current.MainWindow MSDN

Hauptfenster wird mit einem Hinweis auf das erste Fenster Objekt automatisch in der Anwendungsdomäne instanziiert werden. Sie können ein anderes Hauptfenster angeben, indem MainWindow ein anderes Windows -Objekt der MainWindow-Eigenschaft zuweisen. Wenn die ShutdownMode-Eigenschaft des Anwendungsobjekts auf OnMainWindowClose eingestellt ist, bewirkt das Schließen des Hauptfensters , dass die Anwendung heruntergefahren wird. Es ist möglich, die MainWindow-Eigenschaft von XAML festzulegen, wenn das Hauptfenster einer Anwendung nicht das Fenster ist, das durch Festlegen der StartupUri-Eigenschaft in XAML erstellt wird. Die beiden Einschränkungen des XAML-Ansatzes sind: Sie können entweder ein XAML-only Window oder ein XAML-only NavigationWindow als Hauptfenster angeben. Sie müssen die Visibility-Eigenschaft des Fensters festlegen, das Sie angeben, andernfalls wird es nicht angezeigt. Der Verweis auf das erste Window-Objekt, das instanziiert werden soll, wird auch als erstes Element zu der Windows-Auflistung hinzugefügt. Wenn MainWindow anschließend mit einem Verweis auf ein anderes Fenster festgelegt wird, ändert sich die Position des Elements mit der Referenz auf das Hauptfenster, während die Reihenfolge der Elemente in Windows gleich bleibt. Verwenden Sie daher MainWindow immer zum Verweisen auf das Hauptfenster statt des ersten Elements in Windows.

Ich denke, dass Sie nur App.Current.ShutdownMode-ShutdownMode.OnExplicitShutdown vor App.Current.MainWindow.Close(); festlegen müssen und App.Current.Shutdown aufrufen, wenn Sie die Anwendung schließen wollen.

MSDN Application.ShutdownMode

Verwandte Themen