0

我有这个代码的问题。当我启动程序时,标尺位于页面的中心。当 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;
    }
4

1 回答 1

1

看起来 Mouse.GetPosition 在像您期望的那样拖动时不起作用。

这个例子似乎很相关,但他使用的是 DragOver 事件而不是 MouseMove,所以我不完全确定它是否是相同的情况。

于 2015-07-29T15:32:50.380 回答