Comment rouvrir la fenêtre fermée?

J’ai vu tellement d’échantillons que pour ouvrir une fenêtre fermée, je devrais cacher la fenêtre dans l’événement de clôture, mais ce n’est pas juste pour moi si je ferme la fenêtre au milieu de mon travail et ouvre à nouveau la même fenêtre gauche parce que je cache la fenêtre précédemment. Alors, comment puis-je commencer ma fenêtre après avoir fermé ou masqué la fenêtre.

J’appelle actuellement la méthode winload qui consiste à afficher une nouvelle fenêtre après avoir appelé la méthode show d’une fenêtre de masquage.

private PurgeData data=new PurgeData(); private void MenuPurgeData_Click(object sender, RoutedEventArgs e) { try { if (PurgeData == null) { PurgeData = new PurgeData(); PurgeData.Show(); } else { PurgeData.WinLoad(); PurgeData.Show(); } } 

Merci @nagaraju.

Si vous voulez le comportement de hide / show, vous ne devez pas appeler Window.Close () sur la fenêtre, mais le masquer en appelant Window.Hide (). Si l’utilisateur l’a fermé et qu’une fermeture est inévitable, vous pouvez essayer ce qui suit. Remplacez OnClosing dans la fenêtre et définissez e.Cancelled sur true, puis appelez .Hide (). Cela devrait permettre à la fenêtre d’être masquée / affichée même si l’utilisateur ferme la fenêtre.

 // Disclaimer, untested! protected override void OnClosing(CancelEventArgs e) { e.Cancel = true; // cancels the window close this.Hide(); // Programmatically hides the window } 

MODIFIER:

Ok, j’ai maintenant lu votre question correctement 😉 Alors, comment puis-je commencer ma fenêtre après avoir fermé ou masqué la fenêtre.

Lorsque vous ré-afficher la fenêtre en utilisant ce qui précède, il sera bien sûr la même instance que celle qui était précédemment cachée, donc aura les mêmes données et l’état. Si vous voulez un contenu complètement nouveau, vous devez créer une nouvelle fenêtre () et appeler Window.Show (). Si vous masquez / montrez comme ci-dessus, vous obtiendrez la fenêtre exactement dans le même état avant qu’elle ne soit masquée.

Utilisez-vous le pattern MVVM dans votre application WPF? Si oui, vous pouvez essayer ce qui suit. En ayant toutes les données dans votre ViewModel et liées à la vue (c’est-à-dire sans logique métier ni données dans le code derrière la fenêtre), vous pouvez appeler une méthode sur ViewModel pour réinitialiser toutes les données lorsque la fenêtre est affichée. Vos liaisons seront actualisées et l’état de la fenêtre sera réinitialisé. Notez que cela ne fonctionnera que si vous avez correctement suivi MVVM et lié tous les éléments du formulaire principal aux propriétés ViewModel (y compris les sous-contrôles).

Meilleures salutations,

Cela dépend vraiment de la structure de votre application. Comme vous ne maintenez pas l’état, il vous suffit de sauvegarder le type de fenêtre qui a été fermé. Selon le type de fenêtre que vous utilisez, vous pouvez lui atsortingbuer un identifiant (par exemple, dans sa propriété Tag ) afin de pouvoir le reconnaître ultérieurement. Vous pouvez ensuite pousser cet identifiant pendant l’événement de Closing dans une Stack . Ensuite, si l’utilisateur le rouvre, ouvrez la stack pour obtenir l’ID et vérifiez quelle fenêtre correspond à. Vous pouvez ensuite rouvrir cette fenêtre.

Bien sûr, Stack n’est qu’une structure de données et peut ou non vous convenir. L’utilisation d’une stack signifie que l’utilisateur peut rouvrir toutes les fenêtres antérieures qu’il a fermées, mais peut-être souhaiteriez-vous simplement utiliser la fenêtre à la place.

Edit – code de base:

 //create an enum to make it easy to recognise the type of window that was open enum WindowType { Profile, Settings }; //create a stack to hold the list of past windows Stack pastWindows = new Stack(); //give the window type a particular id profileWindow.Tag = WindowType.Profile; //open the window profileWindow.Show(); //in the closing event, if you want the user to be able to reopen this window, push it to the stack protected override void OnClosing(CancelEventArgs e) { pastWindows.Push(WindowType.Profile); //or whatever type it was base.OnClosing(e); } //to reopen the last window void ReopenLastWindow() { WindowType lastType = pastWindows.Pop(); switch(lastType) { case WindowType.Profile: profileWindow.Show(); break; case WindowType.Settings: settingsWindow.Show(); break; default: break; } }