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 :

Click sur un Item d'une ListBox


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 26
    Points
    26
    Par défaut Click sur un Item d'une ListBox
    Bonjour,


    Je n'arrive à trouver nulle part comment faire pour intercepter l'événement click sur un Item d'une ListBox.
    Mon but est de faire un Drag n Drop à partir de cette ListBox, il faut donc que je puisse intercepter cet événement, mais dans tous les tutos que j'ai vu sur le drag n drop, ils disent d'utiliser l'événement MouseDown sur la ListBox, mais le problème est que cet événement ne se produit que quand je clique à un endroit vide, et pas quand je clique sur un Item.

    J'ai essayé aussi la méthode SelectionChanged, c'est plus ou moins ce que je veux, mais ça pose problème dans certains cas où je clique et que la sélection n'a pas changé.

    Comment puis-je faire cela?


    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    J'ai entendu dire qu'il fallait que j'ajoute un événement Click() sur chacun des Items que j'ajoute, mais je ne vois pas comment l'ajouter, rien de tel n'apparaît dans la liste des fonctions appelables.

  3. #3
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Essayes de regarder par ici: http://bea.stollnitz.com/blog/?p=53

    Ps: la listbox est un itemsControl

  4. #4
    Membre régulier Avatar de cyberbobby
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Points : 106
    Points
    106
    Par défaut
    Salut, si je comprends bien ton problème, tu dois abonner tes ListBoxItems à l'événement MouseLeftButtonDown de comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <ListBox x:Name="LBTest" Height="200" Width="100">
        <ListBoxItem Content="Item1" MouseLeftButtonDown="ListBoxItem_MouseLeftButtonDown"/>
    </ListBox>
    C'est ça qu'il te fallait ? Ou j'ai mal compris ?
    (tu as biensûr le sender que tu sais récupérer dans le handler)

  5. #5
    Membre régulier Avatar de cyberbobby
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Points : 106
    Points
    106
    Par défaut
    Waw, Francorchamps, j'avais pas vu :-)

    Je viens de Stavelot ... ;-)

  6. #6
    Membre régulier Avatar de cyberbobby
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Points : 106
    Points
    106
    Par défaut
    Mouais, je viens de me rendre compte que le code que je t'ai envoyé ne fonctionne bizarrement pas en WPF ...

    J'avais réalisé un Drag and Drop en Silverlight depuis une ListBox en utilisant cette méthode ...
    En WPF, ca n'a pas l'air de fonctionner ...
    L'événement Selected fonctionne mais pas MouseLeftButtonDown ...

    Cette solution à l'air de convenir :

    http://marlongrech.wordpress.com/200...tboxes-part-1/

    (Je ne l'ai pas testée)

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Merci pour vos réponses, mais en fait j'ai justement suivi ce tuto http://marlongrech.wordpress.com/200...tboxes-part-1/
    et c'est ce qui pose problème, je ne reçois pas l'événement lorsque j'appuie sur un item, mais seulement lorsque j'appuie sur un endroit vide de ma ListBox.
    J'ai bien vérifié que ce soit pareil que le tuto et c'est bien la même chose.

    Je vais regarder le premier lien, je vous tiens au courant si ça marche ou pas

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    J'ai regardé les liens que vous m'aviez donné, mais je n'ai rien trouvé qui puisse régler mon problème..
    C'est bizarre, ça ne devrait pas être trop compliqué de pouvoir générer un événement quand on clique sur un élément d'une ListBox.
    En attendant j'ai mis l'événement sur SelectionChanged, mais c'est pas génial parce que si je fais un drag and drop d'un élément, puis que je veux refaire un drag and drop de ce même élément, la sélection n'a pas changée donc l'événement n'est pas appelé, et quand je monte la souris comme pour déplacer l'item sélectionné, c'est l'item au-dessus qui se sélectionne, ce qui génère l'événement et ça fait le drag and drop à partir de celui-là et pas de celui du début...
    J'ai bien scruté le nom de tous les événements qu'on peut lier à une ListBox et je ne vois rien qui semble faire en sorte de générer un événement quand on clique sur un item, et pas seulement quand on clique dans le vide de la ListBox ou quand je change la sélection.

  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 Morgoth818 Voir le message
    J'ai bien scruté le nom de tous les événements qu'on peut lier à une ListBox et je ne vois rien qui semble faire en sorte de générer un événement quand on clique sur un item, et pas seulement quand on clique dans le vide de la ListBox ou quand je change la sélection.
    J'ai pas tout compris mais tu as essayé de mettre un Background à ta ListBox ?

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    Et pourquoi pas utiliser un EventSetter sur tous les ListBoxItem pour t'abonner au MouseLeftButtonDown ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Jérem22, comment est-ce que je suis censé faire pour ajouter cet événement aux ListBoxItems? J'ai déjà essayé de le faire, mais à mon avis ça ne doit pas être correct parce que ça fait planter mon programme.
    Pourrais-je avoir un petit extrait de code pour voir comment je peux faire ça?

    Thomas Lebrun, qu'est-ce que ça pourrait changer de mettre un Background? Je ne vois pas bien le rapport. Tu veux dire de mettre une image de fond a ma ListBox?

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Pour ajouter un EventSetter, tu reprends le style de tes ListBoxItem et tu ajoutes l'EventSetter comme ci dessous :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <Style TargetType="{x:Type ListBoxItem}">
      <EventSetter Event="MouseLeftButtonDown" Handler="ListBoxItem_MouseLeftButtonDown" />
     
      <!--
      La il y a le style des ListBoxItem que tu as redéfini ou celui par défaut
      -->
    </Style>

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void ListBoxItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
     
    }

  13. #13
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    J'ai testé ce code, ça compile et tout, j'ai mis un bête MessageBox.Show dans la fonction handler, et pourtant ça ne fonctionne toujours pas.
    J'ai bien vérifié avoir mis la même chose et c'est pareil.

    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Style TargetType="{x:Type ListBoxItem}">
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Style TargetType="{x:Type ListBox}">
    en laissant tout le reste pareil pour voir si il me génère bien l'événement, et quand je clique dans la ListBox dans un espace vide (où il n'y a pas d'Item), la MessageBox s'affiche bien, mais quand je clique sur un ListBoxItem, toujours rien.
    C'est bizarre qu'il génère bien l'événement quand je fais ça avec la ListBox et pas quand je le fais avec ListBoxItem...

    En fait j'ajoute les ListBoxItems lors de l'exécution, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listbox.Items.Add(...);
    Je dois peut-être faire quelque chose avec les items que j'ai ajouté dynamiquement pour qu'ils puissent générer l'événement lorsque je clique dessus?

    Merci pour votre aide

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Essaie avec l'event PreviewMouseLeftButtonDown :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown" />

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
      MessageBox.Show("");
    }

  15. #15
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Super, merci beaucoup, ça fonctionne maintenant! en effet il fallait bien mettre PreviewMouseLeftButtonDown

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

Discussions similaires

  1. ListBox avec CheckBox: click sur un item
    Par yonpo dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 26/11/2010, 11h39
  2. Question sur les items d'une ListBox
    Par arnofly dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/06/2009, 19h19
  3. Double click sur la ligne d'une listbox
    Par lince102 dans le forum Interfaces Graphiques
    Réponses: 13
    Dernier message: 24/01/2008, 14h11
  4. [Question] Ajouter un item dans une ListBox
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 29/12/2005, 19h38
  5. [C#] Recharger une page sur le clic d'une ListBox
    Par pc152 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/02/2005, 12h48

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