我有这个代码的问题。当我启动程序时,标尺位于页面的中心。当 MouseDown 为真时,当我 mousemove 时,矩形(标尺)可以随意拖动。但是,这只适用于第一次拖动。下次我去拖动它时,标尺会跳回到它的原始位置,然后当你将鼠标悬停在它上面时,它会计算从它所在位置到它跳回的位置的距离,并且它会因为 mouseup 事件没有触发而跳出屏幕随着矩形移动。我基本上希望能够多次在屏幕上拖动对象,但是 XStart 和 YStart 需要在每次单击时获取新的渲染值。
我认为原因与 e.GetPosition(this).X; 因为“this”指的是作为统治者父级的网格。
我需要将 RenderTransform 提交给程序吗?还是我的逻辑有错误?
老实说,如果它根本不起作用,那会更有意义,但是一旦完美地工作,然后搞砸是没有意义的。
这是代码:
private void Rectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
XStart = e.GetPosition(this).X;
YStart = e.GetPosition(this).Y;
Console.WriteLine("X: " + XStart + ", Y: " + YStart);
MouseDown = true;
}
private void Rectangle_MouseMove(object sender, MouseEventArgs e)
{
if(MouseDown)
{
X = e.GetPosition(this).X - XStart;
Y = e.GetPosition(this).Y - YStart;
Ruler.RenderTransform = new TranslateTransform(X, Y);
}
}
private void Ruler_MouseUp(object sender, MouseButtonEventArgs e)
{
MouseDown = false;
}