C#WPF RenderTransform重置mousedown

时间:2015-07-29 15:16:56

标签: c# wpf rendertransform

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

1 个答案:

答案 0 :(得分:1)

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

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