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

