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 :

Event MouseLeftButtonDown sur un ListBoxItem


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut Event MouseLeftButtonDown sur un ListBoxItem
    Bonjour,

    J'ai une ListBox qui contient à la fois des ListBoxItems de type "Image" et des ListBoxItem de type "TextBlock", affichés dans un Canvas.
    Je souhaite pouvoir cliquer sur un de ses ListBoxItem et le déplacer dans le Canvas.
    J'ai donc voulu naturellement implémenter les events MouseLeftButtonDown, Move et up pour traiter le déplacement.

    Voici le code xaml pour MouseLeftButtonDown:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <ListBox ItemsSource="{Binding}" Name="IHM_MainScreenObjectsList">
                            <ListBox.ItemContainerStyle>
                                <Style TargetType="{x:Type ListBoxItem}">
                                    <Setter Property="Canvas.Left" Value="{Binding Path=IHM_ScreenObjectCanvasLeft}"/>
                                    <Setter Property="Canvas.Top" Value="{Binding Path=IHM_ScreenObjectCanvasTop}"/>
                                    <EventSetter Event="ListBoxItem.MouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown"/>
                                </Style>
                            </ListBox.ItemContainerStyle>
    </ListBox>

    et en code-behind :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
         ListBoxItem Item = e.Source as ListBoxItem;
         IHM_ScreenObjectModel selectedObject = (IHM_ScreenObjectModel IDBE_MainScreenObjectsList.SelectedItem;
     
    }

    Lorsque je regarde les valeurs dans "source",le contentpresenter est bien le ListBoxItem sur lequel je viens de cliquer mais le IDBE_MainScreenObjectsList.SelectedItem est celui sur lequel j'avais cliqué le coup d'avant (n'est mis à jour que si je clique une seconde fois).
    Quelqu'un peut-il m'expliquer pourquoi? Car je souhaite vraiment récupérer le ListBoxItem sur lequel je clique!
    Je vous remercie d'avance.

  2. #2
    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
    Par défaut
    Salut,

    Est-ce que : IDBE_MainScreenObjectsList = IHM_MainScreenObjectsList ?
    Soit la ListBox ?

    Sinon la sélection doit être déclenchée sur le relâché du clic gauche (donc un évènement MouseUp). Si tu veux qu'il soit sélectionné sur l'événement MouseLeftButtonDown, tu peux le faire ainsi :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
         // Sélection du ListBoxItem
         ((ListBoxItem)sender).IsSelected = true;
     
         ListBoxItem Item = e.Source as ListBoxItem;
         IHM_ScreenObjectModel selectedObject = (IHM_ScreenObjectModel IDBE_MainScreenObjectsList.SelectedItem;
     
    }

  3. #3
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    A mon avis, le traitement de sélection effective est fait sur le même événement sur la listbox elle même. Donc comme ce fait le bubbling, l'événement remonte que plus tard jusqu'a la listBox et la selection n'est faite que plus tard...

    Si tu veux l'item métier sélectionné, cela ne marche pas avec ce code ?:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ListBoxItem Item = e.Source as ListBoxItem;
    IHM_ScreenObjectModel selectedObject = item.DataContext as ScreenObjectModel;

    ++

    Edit: biinoo t'es trop rapide pour moi ;-)

  4. #4
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut
    OK, j'ai compris pourquoi il fallait cliquer deux fois...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Sélection du ListBoxItem
         ((ListBoxItem)sender).IsSelected = true;
          IHM_ScreenObjectModel selectedObject = (IHM_ScreenObjectModel IHM_MainScreenObjectsList.SelectedItem;
    fonctionne comme je le souhaite..

    PS :
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListBoxItem Item = e.Source as ListBoxItem;
    me renvoie Item=null et du coup, impossible d'accéder à data.context.
    En traçant mon code, j'avais vu que e.source etait un System.Windows.Controls.ContentPresenter et que son content était le IHM_ScreenObjectModel sur lequel je venais de cliquer.

    PPS : je ne suis pas sure que mon PS soit très clair..

    En tout cas, merci à vous deux!

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

Discussions similaires

  1. Event Paint sur button
    Par olibara dans le forum C#
    Réponses: 4
    Dernier message: 09/05/2008, 18h15
  2. Event clic sur combo
    Par Aragorn05 dans le forum SWT/JFace
    Réponses: 8
    Dernier message: 16/11/2007, 11h01
  3. Event.observe sur IE
    Par moumoune65 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2007, 11h45
  4. Events "OnBeforeLoad()" sur le body
    Par NikoBe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/10/2006, 16h00
  5. [Event] ChangeListener sur JSpinner
    Par tomburn dans le forum Général Java
    Réponses: 2
    Dernier message: 01/04/2005, 16h45

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