Mi sono imbattuto in un caso strano in cui l'evento Close
si propagava alla finestra padre e ne determina la chiusura.Perché si propagherà l'evento Window.Close?
Ho fatto un esempio minimo, come illustrato di seguito
Per TestWindow
non è altro che la finestra WPF predefinito generato da VS
in App.xaml.cs
sovrascrivo caso OnStartup
e uso come Main
funzione personalizzata
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
TestWindow t = new TestWindow();
t.ShowDialog();
}
Ora, se si fa clic sul pulsante X per chiudere TestWindow, l'applicazione si arresta invece di mostrare MainWindow
. Se si commenta t.ShowDialog
, lo MainWindow
verrà visualizzato correttamente. Avanti se si ascolta la Closing
caso di MainWindow
troverete che si attiverà dopo il TestWindow
chiude, che non mi sembra giusto
Possiamo solo aggiungere il codice per 'OnStartup ', non è necessario un gestore separato. Mi piace questo approccio. Comunque sarebbe perfetto se spiegassi l'App scegliendo la sua MainWindow (come faccio nella mia risposta). Con quella aggiunta, questa è la risposta più perfetta e concordo sul fatto che ciò che ho suggerito sull'impostazione esplicita della MainWindow non è buono come questo (a meno che non venga usato 'ShowDialog()'). –
Grazie a @KingKing. Sì, sono un po 'in perdita per la spiegazione, purtroppo. Ho pensato che potesse essere qualcosa a che fare con la prima finestra mostrata come _dialog_ e forse quando è chiusa, WPF dice _ "oh non ci sono più finestre, tempo di uscire" _. Ho pensato a Windows normale in cui le finestre di dialogo hanno la loro pompa di messaggi. Non sono sicuro se è correlato. Anche se questo è WPF, non sono sicuro di quanto siano simili. Continuerò a indagare. Buon fine settimana! – MickyD
@KingKing possibile spiegazione aggiunta – MickyD