Alors on part de l'exemple MSDN :
Drag and Drop on a user control
![]() |
MSDN Drag and Drop Sample |
C'est intéressant mais il nous manque tout un tas de choses. Ce que j'aimerais faire c'est dropper des objets dans une Grid savoir où il sont dans la Grid et pouvoir commencer réellement à jouer avec mes objets.
Il est par exemple intéressant de jouer avec les propriétés de ma Grid et d'y déplacer les objets :
![]() |
Grid.SetRow(object,x), Grid.SetColumn, Grid.SetColumnSpan,Grid.SetRowSpan |
![]() |
Grid.GetRow(object,x), object.GetValue(Grid.RowProperty) |
Mais je voudrais aller plus loin et pouvoir dropper mes objects mais qu'ils ne se chevauchent pas. Pouvoir leur donner la taille que je veux en la changeant dans un menu contextuel et toujours en évitant qu'ils ne se chevauchent.
Voilà l'exemple que je vous propose :
![]() |
WPF Drag&Drop Sample CanDrop and CanResize |
Requirements :
WPF .NET 4.0
Visual Studio 2010
Microsoft.Practices.Prism
Microsoft.Practices.Prism.Interactivity
Microsoft.Practices.Prism.UnityExtension
Microsoft.Practices.Prims.Unity
Download and Setup Prism Library 5.0 for WPF
Inutile de préciser que les packages nugets sont difficiles à installer en ce qui concerne Prism et ses différentes version, en constante modification de version de namespace... bref la résolution de vos problèmes passera peut être par l'exécution de la commande : PM> Install-Package CommonServiceLocator dans la "Console du gestionnaire de package" suivie de PM> Install-Package Prism.UnityExtensions -Version 4.1.0
Download Sample
Si vous souhaitez aller plus loin et notamment en fonctionnant avec le modèle MVVM, je vous recommande vivement les articles suivants :
Drag and Drop in WPF
Drag and Drop in WPF - Part II
Je que j'apprécie vraiment dans ce Sample c'est la mise en place d'un "Adorner", une parure qui à travers une Property DragAdornerTemplate liée à une DependencyProperty affiche une image en transparence lorsque l'on déplace les objets. Dans le Xaml de la façon suivante :
<ListBox dd:DragDrop.DragAdornerTemplate="{StaticResource PupilDragAdorner}">