我遇到此代码的问题。当我启动程序时,标尺位于页面的中心。当我在MouseDown为true时鼠标移动时,Rectangle(标尺)可以随意拖动。但是,这仅适用于第一次拖动。下次我去拖动它时,标尺会跳回到它的原始位置,然后当你将鼠标移到它原来的位置时,会计算它从它跳回的位置的距离,并且当鼠标事件不会触发时它会跳出屏幕随着矩形移动。我基本上希望能够在屏幕上拖动对象多次,但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;
}
答案 0 :(得分:1)
看起来Mouse.GetPosition在拖动时并不像您期望的那样工作。
This example似乎相关,但他使用的是DragOver事件而不是MouseMove,所以我不完全确定它是否是相同的情况。