Bonjour,
En windows Form quand on voulait pouvoir facilement la afficher/masquer une Form sans créer à chaque fois une nouvelle instance, on interceptait la fermeture de la Form et on la masquait simplement avec la méthode Hide().
En wpf, j'essaie d'appliquer la même stratégie. J'ai donc écrit le code suivant :
Mais j'obtiens le message suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { e.Cancel = true; this.Hide(); }
Cannot set Visibility or call Show, ShowDialog, Close, or Hide while window is closing.
Etrange que même avec e.Cancel = true;, j'ai cette exception.
J'ai cependant trouvé une solution à ce problème. Il faut passer le champ _isClosing à false par reflexion. Ce qui donne :
Mais vous ne trouvez pas que c'est un peu bizarre que le masquage nous soit refusé ainsi même après avoir e.Cancel = true ? Ou alors on procède différemment en WPF et on n'utilise plus cette technique...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { typeof(Window).GetField("_isClosing", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(this, false); e.Cancel = true; this.Hide(); }
Partager