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, beginEdit() et récupérer le treeview d'un treeviewItem


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut TreeView, beginEdit() et récupérer le treeview d'un treeviewItem
    Bonjour,

    Quelques question d'un habitué des winforms, sur la correspondance entre un treeview winform et un treeview WPF :

    * Comment lorsqu'on récupère un pointeur sur un treeviewItem, peut-on connaitre à quel TreeView il appartient (en winform : propriété TreeView du TreeNode) ?

    * Comment déclenche-t-on programmatiquement le mode édition du header TreeViewItem ? (fonction BeginEdit() sur un TreeNode en winforms)

    D'avance merci,

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Harry_polin Voir le message
    * Comment lorsqu'on récupère un pointeur sur un treeviewItem, peut-on connaitre à quel TreeView il appartient (en winform : propriété TreeView du TreeNode) ?
    Il n'y a pas de propriété TreeView, il faut remonter l'arbre visuel jusqu'au TreeView. Pour ce genre de choses j'utilise généralement une méthode d'extension générique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public static class VisualTreeExtensions
        {
            public static T FindParent<T>(this DependencyObject obj) where T : DependencyObject
            {
                var tmp = VisualTreeHelper.GetParent(obj);
                while (tmp != null && !(tmp is T))
                {
                    tmp = VisualTreeHelper.GetParent(obj);
                }
                return tmp as T;
            }
        }

    Citation Envoyé par Harry_polin Voir le message
    * Comment déclenche-t-on programmatiquement le mode édition du header TreeViewItem ? (fonction BeginEdit() sur un TreeNode en winforms)
    Le template par défaut du TreeViewItem ne permet pas l'édition. Il faut que tu définisses un template pour l'édition, et que tu appliques ce template quand tu veux passer en mode édition.

  3. #3
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Je ne me suis jamais servi des fonctions d'extensions, où faut-il les mettre ?
    VisualTreeHelper c'est une classe à toi ? Que contient la fonction GetParent() de cette classe ?

    Le template par défaut du TreeViewItem ne permet pas l'édition. Il faut que tu définisses un template pour l'édition, et que tu appliques ce template quand tu veux passer en mode édition.
    Heu, sérieusement y'a pas plus simple ? J'évite la quincaillerie des templates, parceque je trouve ça très shadockien.
    Si il n'y a vraiment pas moyen, pourrais-tu me faire pointer vers un code exemple ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Harry_polin Voir le message
    Je ne me suis jamais servi des fonctions d'extensions, où faut-il les mettre ?
    Les méthodes d'extension sont une nouveauté de C# 3. Ca permet de définir des méthodes qui s'utilisent comme des méthodes d'instance (bien que ce soit en fait des méthodes statiques). Plus d'explications dans cet article (page 7 du PDF)

    Citation Envoyé par Harry_polin Voir le message
    VisualTreeHelper c'est une classe à toi ? Que contient la fonction GetParent() de cette classe ?
    Non, c'est une classe standard de WPF, elle est dans le namespace System.Windows.Media

    Pour utiliser la méthode il suffit que tu mettes une directive using pour le namespace où tu as mis la classe VisualTreeExtensions (si ce n'est pas le namespace courant), et que tu utilises la méthode comme une méthode d'instance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TreeViewItem tvi = ...
     
    TreeView treeView = tvi.FindParent<TreeView>();

    Citation Envoyé par Harry_polin Voir le message
    Heu, sérieusement y'a pas plus simple ? J'évite la quincaillerie des templates, parceque je trouve ça très shadockien.
    Si il n'y a vraiment pas moyen, pourrais-tu me faire pointer vers un code exemple ?
    Ben si tu apprends pas à te servir des templates tu iras pas très loin en WPF... Les ControlTemplate sont pas évidents à comprendre au début, mais là tu as juste besoin d'un DataTemplate, c'est pas trop méchant
    J'ai pas d'exemple sous la main, mais ça devrait pas être difficile à trouver sur google...

  5. #5
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    J'ai fait un helper classique, car je trouve que les fonctions d'extension vont un peu trop à l'encontre d'une discipline classique de programmation objet.
    Je pense qu'il y a une erreur dans ton code à l'intérieur du while, il devrait y avoir un VisualTreeHelper.GetParent(tmp), au lieu de VisualTreeHelper.GetParent(obj)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public static class TreeViewHelper
        {
            public static TreeView GetTreeView(TreeViewItem treeviewItem)
            {
                DependencyObject l_dependencyObject = treeviewItem;
                while(l_dependencyObject != null && !(l_dependencyObject is TreeView))
                {
                    l_dependencyObject = VisualTreeHelper.GetParent(l_dependencyObject);
                }
                return (TreeView)l_dependencyObject;
            }
        }
    Pour le BeginEdit(), je suis passé par la case google et recherche sur dvp.com avant de poster. Le problème est que selon les réponses que j'ai pu voir, la fonction BeginEdit() sur un treeviewitem semble bel et bien exister (http://www.telerik.com/community/for...beginedit.aspx), et que chez moi (et chez toi), elle n'existe pas... Donc je ne comprends pas.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Harry_polin Voir le message
    J'ai fait un helper classique, car je trouve que les fonctions d'extension vont un peu trop à l'encontre d'une discipline classique de programmation objet.
    Ben au final ça revient au même, c'est une méthode statique... c'est juste plus pratique à utiliser sous forme de méthode d'extension, enfin je trouve


    Citation Envoyé par Harry_polin Voir le message
    la fonction BeginEdit() sur un treeviewitem semble bel et bien exister (http://www.telerik.com/community/for...beginedit.aspx)
    Non, ça n'existe pas dans le TreeView standard. Le lien que tu donnes parle du RadTreeView de Telerik (payant)

  7. #7
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Ça marche, merci !

Discussions similaires

  1. Treeview parent/enfant récupérer index
    Par miky77 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 27/07/2011, 14h11
  2. Récupérer un treeview dans une callback
    Par yetimothee dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 26/09/2010, 11h56
  3. [treeview] image de fond pour treeview BDS 2006
    Par netah25 dans le forum C++Builder
    Réponses: 6
    Dernier message: 04/01/2007, 23h34
  4. [VB.NET] [TreeView] expand node d'un treeview
    Par graphicsxp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/04/2005, 16h21
  5. Récupérer la sélection d'un TreeView
    Par nostroyo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/06/2003, 12h30

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