【发布时间】:2015-09-10 06:50:32
【问题描述】:
我正在尝试在我的测试应用中实现一些窗口,现在我正在尝试使这些窗口能够被拖动。
首先,我检查鼠标位置是否在窗口顶部,以及是否按住鼠标左键,这里:
if (mouseOver && LastLeftPressed && MouseLeftPressed)
{
onHoldClick(Events);
}
这是我尝试过的:
private static void onHold(object sender, EventArgs e)
{
var LastMouse = mousePosition;
mousePosition = Mouse.GetState().Position;
var window = sender as Window;
if (LastMouse != mousePosition)
{
var deltaX = mousePosition.X - LastMouse.X;
var deltaY = mousePosition.Y - LastMouse.Y;
window.Rectangle = new Rectangle(mousePosition.X - deltaX, mousePosition.Y - deltaY, Width, Height);
}
}
有时候结果真的很奇怪,比如窗口跳转到随机位置,但通常结果如上图所示。当我点击'n'按住并缓慢移动鼠标时,窗口会立即移动到鼠标的位置。
我想不通。
【问题讨论】:
-
deltaX 和 deltaY 计算被翻转。这对我来说似乎不对?
-
是的。当它不起作用时,我正在测试可能的组合,然后忘记更改它。正确的应该是
mousePosition - LastMouse和矩形设置为window.Rectangle + delta -
编辑得更容易理解。谢谢,@craftworkgames