IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[WPF] cacher/afficher une window


Sujet :

Windows Presentation Foundation

  1. #1
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut [WPF] cacher/afficher une window
    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 :

    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();
            }
    Mais j'obtiens le message suivant :

    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 :

    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();
            }
    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...

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    T'as essayé de faire un truc de ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TaWindow.Visibility = System.Windows.Visibility.Hidden;

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    T'as essayé de faire un truc de ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TaWindow.Visibility = System.Windows.Visibility.Hidden;
    Oui, cela me semble plus simple aussi...

    Sinon, ici (http://forums.microsoft.com/MSDN/Sho...76030&SiteID=1), il passe aussi par réflexion.

  4. #4
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Non, c'est pareil que Hide(), on obtient toujours : Cannot set Visibility or call Show, ShowDialog, Close, or Hide while window is closing.
    Je comprends pas, soit c'est un grosse aberration, soit il y a une autre technique en WPF...

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par maa Voir le message
    Non, c'est pareil que Hide(), on obtient toujours : Cannot set Visibility or call Show, ShowDialog, Close, or Hide while window is closing.
    Je comprends pas, soit c'est un grosse aberration, soit il y a une autre technique en WPF...
    Le code est bon, y a un exemple sur msdn pour WPF, avec le code XAML et code behind qui va bien.

    http://msdn2.microsoft.com/fr-fr/lib...isibility.aspx

    Y a un mec qui a eu le même pb que toi et la solution est ici :

    http://www.msdner.com/dev-archive/12...9-1272594.shtm

    La solution est :

    Hi Josh, if I recall correctly, the reason for this behavior was to maintain a consistent window visibility state in order to prevent issues were seen caused by re-showing a closed window, such as inconsistent visibility values after return of ShowDialog() method and application not shutting down when OnLastWindowClosed was set.

    Eddie.

  6. #6
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Ok mais à partir du moment où on a fait e.cancel = true, on sait qu'on ne va pas fermer la window donc je ne vois pas ce qui empêche de la masquer...

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Disons que c'est dans la façon dont les évènements interviennent je pense.

    Dans le Closing, tu dis: "OK, je met e.Cancel = True donc en fait, je vais pas fermer ma Windows" mais si tu dois mettre du code, il vient logiquement dans l'évent d'après. D'abord, tu dis ce que tu veux/va faire et ensuite, tu le fais

  8. #8
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Donc on met où la fonction Hide() ?

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par maa Voir le message
    Donc on met où la fonction Hide() ?
    Je t'ai juste donné la logique mais cela ne convient pas à tous les cas

    Pour toi, utilise la technique par reflexion que tu as mise avant.

Discussions similaires

  1. Cacher/afficher une partie d'une fenêtre
    Par tifil dans le forum Débuter
    Réponses: 5
    Dernier message: 04/12/2011, 18h02
  2. Cacher/Afficher une ligne de tableau
    Par Baldy dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/11/2011, 11h19
  3. WPF WrapPanel, Afficher une mosaïque d’image sans précharger les images invisibles
    Par nicopulse dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 18/06/2010, 15h35
  4. [Interaction] Comment afficher une application Windows Form dans une WPF ?
    Par Lookoum dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 08/09/2008, 16h50
  5. cacher afficher une image-lien
    Par Alex35 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/11/2006, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo