Bonsoir,
Voilà j'ai une petite question concernant WPF et notamment sur une fonctionnalité de type drag'n'drop que je tente d'implémenter pour un projet perso.
A terme j'aimerai réaliser un éditeur de graphes (pour une application concrète de path finding avec éditeur etc), donc avec des nœuds reliés par des arcs etc.
J'ai donc dans un premier temps crée un Canva. J'y ai ajouté la possibilité de réaliser un drag'n'drop d'une Ellipse (qui représente un nœud) dans ce Canva.
Rien de transcendant jusque là, j'utilise les events de la souris et je créer un nouvel objet de type Ellipse à la position du curseur une fois le Drop effectué.
Cependant, lorsque le Drop a lieu aux bords/limites du Canva, mon Ellipse est déposée en dehors du Canva !
Par exemple ici je l'ai déposé dans le coin inférieur droit du Canva (fond gris) et l'Ellipse se retrouve dans ma Window :
Quelle méthode puis-je mettre en place afin de d'éviter cela ?
Pour info la méthode Drop ressemble à :
(désolé pour les noms de variables, c'est juste pour la démo)
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 private void canvas1_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(Ellipse))) { Ellipse ellipsez = e.Data.GetData(typeof(Ellipse)) as Ellipse; Ellipse ellipseFoo = new Ellipse() { Width = ellipsez.Width, Height = ellipsez.Height, Fill = ellipsez.Fill }; Canvas.SetLeft(ellipseFoo, e.GetPosition(this.canvas1).X); Canvas.SetTop(ellipseFoo, e.GetPosition(this.canvas1).Y); this.canvas1.Children.Add(ellipseFoo); } else { e.Effects = DragDropEffects.None; } }
En vous remerciant d'avance pour votre aide,
Bonne soirée.
Partager