[Silverlight] [Drag&Drop] Intégrer facilement un glisser-déposer en Silverlight 4

Une pratique pas forcément simple à mettre en place en winform, mais qui se trouve bien plus simple à mettre en place en Silverlight ou en wpf, notamment grâce à une gestion des événements mieux pensée.

Les modifications au niveau des événements en WPF et en Silverlight par  rapport au Windows Form classique sont simples mais bien plus logique (du coup on se demande comment on faisait avant...).

Prenons un exemple,  nous avons un conteneur (Panel) et un bouton dans ce Panel. Je mets un écouteur sur l'évènement MouseMove de mon Panel.

 

En WinForm :
Tant que je déplace ma souris sur le Panel, pas de soucis mon événement est lancé correctement. Par contre si je déplace ma souris sur mon bouton, l’évènement MouseMove n’est plus lancé. Pire un MouseLeave du Panel est déclenché. Effectivement, je ne suis plus sur le Panel, je suis sur le bouton, c'est vrai mais illogique, en réalité je suis à la fois sur le bouton et sur le Panel.

 

En Silverlight et  WPF :
Cette gestion a été (enfin ?) revue. Maintenant le mouse move sera lancé tant que je suis sur mon panel, même si mon curseur passe sur mon bouton. Cela permet une gestion beaucoup plus fine et permissive des événements.
Attention tout de même si j'ai des événements sur mon Panel et que celui-ci à un fond transparent, ils ne seront pas lancés ! C'est à savoir pour éviter de perdre un temps fou ...

 

Pour en revenir au drag & drop, rien de bien difficile, cela permet en très peu de temps de faire une liste que l'on peut trier sur elle-même ou avec d'autres listes.
Dans cet exemple j'utilise des StackPanel mais il est bien sûr possible d'adapter cela pour utiliser d'autres types de conteneurs.

 

Vous pouvez tester la démo ci dessous : (c'est pas qu'une image :-) )

Télécharger les sources

© 2011 Copyright cigo-developpement.fr