鼠标按下 释放 移动
<Button PreviewMouseDown="Button_MouseDown"
PreviewMouseMove="Button_MouseMove"
PreviewMouseUp="Button_MouseUp"> </Button>
记录位置
//鼠标是否按下
bool _isMouseDown = false;
//鼠标按下的位置
Point _mouseDownPosition;
//鼠标按下控件的位置
Point _mouseDownControlPosition;
//鼠标按下事件
private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
var c = sender as Control;
_isMouseDown = true;
_mouseDownPosition = e.GetPosition(this);
_mouseDownControlPosition = new Point(double.IsNaN(Canvas.GetLeft(c))? 0:Canvas.GetLeft(c),double.IsNaN(Canvas.GetTop(c)) ? 0 : Canvas.GetTop(c) );
c.CaptureMouse();
}
鼠标移动
private void Button_MouseMove(object sender, MouseEventArgs e)
{
if (_isMouseDown)
{
var c = sender as Control;
var pos = e.GetPosition(this);
var dp = pos - _mouseDownPosition;
Canvas.SetLeft(c, _mouseDownControlPosition.X+ dp.X);
Canvas.SetTop(c, _mouseDownControlPosition.Y + dp.Y);
}
}
鼠标释放
private void Button_MouseUp(object sender, MouseButtonEventArgs e)
{
var c = sender as Control;
_isMouseDown = false;
c.ReleaseMouseCapture();
}