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.
Partager