wpf。鼠标控制 rectangle 移动 鼠标不松 rectangle 会跳动,已经加了是否拖拽变量
时间: 2023-09-01 12:11:01 浏览: 258
你好,关于鼠标控制 Rectangle 移动时的跳动问题,可以考虑在鼠标移动事件中记录鼠标的点击位置和当前位置,然后计算出鼠标移动的距离,将这个距离加到 Rectangle 的 Left 和 Top 属性上即可。同时,可以加一个标志位,记录鼠标是否处于拖拽状态,如果是,则进行移动,否则不进行移动。这样可以避免鼠标不松开时的跳动现象。
具体实现可以参考下面的代码示例:
```
private bool isDragging = false; // 是否处于拖拽状态
private Point mouseOffset; // 鼠标点击位置与 Rectangle 左上角的距离
private void rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
isDragging = true;
mouseOffset = e.GetPosition(rectangle);
}
private void rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
isDragging = false;
}
private void rectangle_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
Point point = e.GetPosition(canvas);
double left = point.X - mouseOffset.X;
double top = point.Y - mouseOffset.Y;
rectangle.SetValue(Canvas.LeftProperty, left);
rectangle.SetValue(Canvas.TopProperty, top);
}
}
```
这里的 canvas 是 Rectangle 所在的容器,可以根据实际情况进行修改。另外,需要将 Rectangle 的 MouseLeftButtonDown、MouseLeftButtonUp 和 MouseMove 事件分别绑定到对应的处理函数上。
阅读全文