WPF mouse drag element instance

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

copy code

//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)

copy code

3. Drag example code:

copy 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);
    }
}

copy code

Guess you like

Origin blog.csdn.net/u014090257/article/details/120347550