Quote: yWpf mouse drag element example - Tianma 3798 - Blog Park
1. Mouse capture and release in Wpf
//Take a rectangle as an example // create mouse capture Mouse.Capture(rectOne); // release mouse capture rectOne.ReleaseMouseCapture();
2. Get or set the position of the element under the positioning layout Canvas in Wpf
In the mouse event of the specified element, for example, MouseLeftButtonDown, MouseLeftButtonUp, MouseMove get the current mouse position relative to Canvas, and position operation
//Get the mouse position e.GetPosition(canvasOne).X e.GetPosition(canvasOne).Y // Get the position of the element Canvas.GetLeft(rectOne) Canvas.GetTop(rectOne) //Set the position of the specified element, etc. Canvas.SetLeft(rectOne, cLeft) Canvas.SetTop(rectOne, cTop)
3. Drag example code:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); //Register for mobile events rectOne.MouseLeftButtonDown += rectOne_MouseLeftButtonDown; rectOne.MouseLeftButtonUp += rectOne_MouseLeftButtonUp; rectOne.MouseMove += rectOne_MouseMove; } bool enableMove = false; double spanLeft = 0; double spanTop = 0; //Mouse move private void rectOne_MouseMove(object sender, MouseEventArgs e) { if (enableMove) { var cLeft = e.GetPosition(canvasOne).X - spanLeft; var cTop = e.GetPosition(canvasOne).Y - spanTop; //Set the position of the rectangle Canvas.SetLeft(rectOne, cLeft); Canvas.SetTop(rectOne, cTop); } } //mouse release private void rectOne_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { // release mouse capture rectOne.ReleaseMouseCapture(); enableMove = false; spanLeft = spanTop = 0; } //mouse pressed private void rectOne_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { //Create mouse capture Mouse.Capture(rectOne); enableMove = true; spanLeft = e.GetPosition(canvasOne).X - Canvas.GetLeft(rectOne); spanTop = e.GetPosition(canvasOne).Y - Canvas.GetTop(rectOne); } }