Wpf 鼠標拖動元素實例


1.Wpf中鼠標捕獲和釋放

//以矩形為例
//創建鼠標捕獲
Mouse.Capture(rectOne);
//釋放鼠標捕獲
rectOne.ReleaseMouseCapture();

2.Wpf中在定位布局Canvas下獲取或設置元素的位置

在指定元素的鼠標事件中例如,MouseLeftButtonDown,MouseLeftButtonUp,MouseMove獲取當前鼠標相對於Canvas 的位置,以及位置操作

//獲取鼠標位置
e.GetPosition(canvasOne).X
e.GetPosition(canvasOne).Y
//獲取元素位置
Canvas.GetLeft(rectOne)
Canvas.GetTop(rectOne)
//設置指定元素位置等
Canvas.SetLeft(rectOne, cLeft)
Canvas.SetTop(rectOne, cTop)

3.拖動實例代碼:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        //注冊移動事件
        rectOne.MouseLeftButtonDown += rectOne_MouseLeftButtonDown;
        rectOne.MouseLeftButtonUp += rectOne_MouseLeftButtonUp;
        rectOne.MouseMove += rectOne_MouseMove;
    }
    bool enableMove = false;
    double spanLeft = 0;
    double spanTop = 0;
    //鼠標移動
    private void rectOne_MouseMove(object sender, MouseEventArgs e)
    {
        if (enableMove)
        {
            var cLeft = e.GetPosition(canvasOne).X - spanLeft;
            var cTop = e.GetPosition(canvasOne).Y - spanTop;
            //設置矩形的位置
            Canvas.SetLeft(rectOne, cLeft);
            Canvas.SetTop(rectOne, cTop);
        }
    }
    //鼠標松開
    private void rectOne_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        //釋放鼠標捕獲
        rectOne.ReleaseMouseCapture();
        enableMove = false;
        spanLeft = spanTop = 0;
    }
    //鼠標按下
    private void rectOne_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        //創建鼠標捕獲
        Mouse.Capture(rectOne);
        enableMove = true;
        spanLeft = e.GetPosition(canvasOne).X - Canvas.GetLeft(rectOne);
        spanTop = e.GetPosition(canvasOne).Y - Canvas.GetTop(rectOne);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM