可以把Rectangle改为其他控件,如Panel,实现类似操作。
在MainPage.xaml中:
<Canvas x:Name="rootCanvas" Width="400" Height="300" Background="Gray"> <Rectangle Canvas.Left="30" Canvas.Top="30" Fill="Red" Width="50" Height="50" MouseLeftButtonDown="Rectangle_MouseLeftButtonDown" MouseMove="Rectangle_MouseMove" MouseLeftButtonUp="Rectangle_MouseLeftButtonUp"> </Rectangle> </Canvas>
在MainPage.xaml.cs中:
private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Rectangle item = sender as Rectangle; //null是绝对位置,如果是某个控件则是相对这个控件的位置 mouseVerticalPosition = e.GetPosition(null).Y; mouseHorizontalPosition = e.GetPosition(null).X; isMouseCaptured = true; item.CaptureMouse();//开始捕获鼠标 } private void Rectangle_MouseMove(object sender, MouseEventArgs e) { Rectangle item = sender as Rectangle; if(isMouseCaptured) { //计算鼠标变化量 double detaY = e.GetPosition(null).Y - mouseVerticalPosition; double detaX = e.GetPosition(null).X - mouseHorizontalPosition; //获取矩形新的top和left值 double newTop = detaY + (double)item.GetValue(Canvas.TopProperty); double newLeft = detaX + (double)item.GetValue(Canvas.LeftProperty); //设置新的坐标值 item.SetValue(Canvas.TopProperty, newTop); item.SetValue(Canvas.LeftProperty, newLeft); //保存现在的鼠标坐标 mouseHorizontalPosition = e.GetPosition(null).X; mouseVerticalPosition = e.GetPosition(null).Y; } else { } } private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { Rectangle item = sender as Rectangle; //释放鼠标 isMouseCaptured = false; item.ReleaseMouseCapture(); mouseHorizontalPosition = -1; mouseVerticalPosition = -1; }