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 :

TreeView DoubleClick Expand/Collapse


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Par défaut TreeView DoubleClick Expand/Collapse
    Bonjour.


    J'utilise actuellement plusieurs TreeView dans mon projet. Afin d'homogénéiser l'ensemble de ces TreeView, j'utilise un style global.

    Mon problème se situe dans la gestion du double click sur un item du TreeView et la gestion du "collapse" et de "l'expand". En effet, lors du premier double click sur un noeud, celui-ci se déplie, ce qui me convient. Cependant, lors du double click sur ce noeud déplié, celui ce replie, ce qui ne me convient pas.

    Il existe bien des solutions à ce problème en passant par le code behind mais cela ne me convient pas. J'aimerais pouvoir redéfinir ce fonctionnement pour l'ensemble des TreeView du projet, et non pas pour chacun d'entre eux.

    J'ai déjà regardé du côté des triggers dans le style, mais je n'ai pas trouver la solution. Peut être existe-t-elle ?

    J'ai aussi essayer d'overrider les TreeViewItem, ce qui me permet alors de redéfinir les méthodes de gestion du collapse et de l'expand, mais une fois ma classe CustomTreeViewItem créée, je ne sais pas comment indiquer à mes TreeView d'utiliser mes CustomTreeViewItem plutôt que les TreeViewItem.

    Quelqu'un à-t-il déjà rencontrer ce problème ?


    Merci d'avance pour votre aide !

  2. #2
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,

    Pas testé, à essayer, une propriété de dépendance à appliquer aux TreeView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    using System.Windows;
        using System.Windows.Controls;
        using System.Windows.Input;
     
        class Class1
        {
            public static readonly DependencyProperty DisableDoubleClickProperty = 
                DependencyProperty.RegisterAttached
                (
                    "DisableDoubleClick", 
                    typeof(bool),
                    typeof(Class1),
                    new PropertyMetadata(false, OnDisableDoubleClickChanged)
                );
     
            public static void SetDisableDoubleClick(Control target, bool value)
            {
                if (target != null)
                {
                    target.SetValue(DisableDoubleClickProperty, value);
                }
            }
     
            public static bool GetDisableDoubleClick(Control target)
            {
                return target != null && (bool)target.GetValue(DisableDoubleClickProperty);
            }
     
            private static void OnDisableDoubleClickChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
            {
                var control = (Control)target;
     
                if ((bool)e.NewValue)
                {
                    control.PreviewMouseDoubleClick += new System.Windows.Input.MouseButtonEventHandler(control_PreviewMouseDoubleClick);
                }
                else
                {
                    control.PreviewMouseDoubleClick -= control_PreviewMouseDoubleClick;
                }
            }
     
            private static void control_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                e.Handled = true;
            }
        }

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Par défaut
    Salut MetalGeek,

    Ta solution permet de rendre actif ou inactif le double click sur des CustomTreeViewItem. Elle fonctionne.

    Cependant, ce n'est pas exactement ce que je veux faire. J'aimerai dire à un CustomTreeView d'utiliser des CustomTreeViewItem dans lesquels j'override OnCollapsed.

  4. #4
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,
    dans ce cas tu dois surcharger les méthodes ItemsControl.IsItemItsOwnContainerOverride (dans laquelle tu retournes en général "true" si le paramètre est un UIElement - dans ton cas tu peux tester si c'est un "CustomTreeViewItem") et ItemsControl.GetContainerForItemOverride (dans laquelle, typiquement, tu vas retourner un objet CustomTreeViewItem que le TreeView utilisera à la place du TreeViewItem de base).

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Par défaut
    Salut MetalGeek,

    C'est exactement ce que je cherchais !

    Une simple petite précision, je voulais que les fils de mes "CustomTreeViewItem" soient eux aussi des "CustomTreeViewItem", j'ai donc surcharger la méthode "GetContainerForItemOverride()" aussi dans la classe "CustomTreeViewItem".

    Merci pour ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 30/01/2009, 11h17
  2. [JTree] Expand & Collapse de certains noeuds
    Par gids01 dans le forum Composants
    Réponses: 2
    Dernier message: 08/02/2008, 16h34
  3. fonctions expand/collapse pour tableaux
    Par destructive dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/04/2007, 10h43
  4. JXTreeTable disparition des icones expand/collapse
    Par lenwil dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 13/04/2007, 16h41
  5. Script Expand Collapse
    Par RobertP dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/12/2006, 12h25

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