Bonjour,

J'ai réalisé le drag & drop d'un shape sur un canvas de la façon suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private void drag_MouseDown(object sender, MouseButtonEventArgs e)
       {
           //On verrouille la souris sur le label  
           //si le bouton gauche est pressé  
           if (e.LeftButton.Equals(MouseButtonState.Pressed))
           {
               this.rect01.CaptureMouse();
               stage.MouseMove +=new MouseEventHandler(drag_MouseMove);
           }
       }
 
       private void drag_MouseMove(object sender, MouseEventArgs e)
       {
           if (e.LeftButton.Equals(MouseButtonState.Pressed))
           {
               //On modifie la position du label dans le canvas   
               //en récupérant la position de la souris
               // stage = le canvas
               Canvas.SetLeft(this.rect01, e.GetPosition(this.stage).X);
               Canvas.SetTop(this.rect01, e.GetPosition(this.stage).Y);
               stage.MouseUp +=new MouseButtonEventHandler(drag_MouseUp);
           }
       }
 
       private void drag_MouseUp(object sender, MouseButtonEventArgs e)
       {
           //On déverrouille la souris  
           this.rect01.ReleaseMouseCapture();
       }
Le drag & drop s'effectue bien mis à part une petite chose, le shape peut sortir du Canvas et aller se positionner sur un panel juste à côté je trouve ça bizarre étant donné que c'est un enfant du Canvas je ne comprend pas pourquoi il peut sortir de la zone de son parent.

J'aimerais l'en empêcher, pour celà je pourrais faire un test pour voir si les coordonnées du shape ne sorte pas de la zone de canvas mais je pense qu'il y a un moyen plus " propre " pour éviter que le shape se ballade un peu partout dans la fenêtre.

Je ne sais pas si j'ai été clair dans ma description du problème, si vous avez des questions n'hésitez pas!

Merci d'avance aux âmes charitables qui éclaireront ma lanterne!

Cordialement,

Goten960.