2015-07-29 11 views
0

У меня возникла проблема с этим кодом. Когда я запускаю программу, Ruler находится в центре страницы. Когда я mousemove, когда MouseDown истинно, Rectangle (Ruler) можно перетащить, как я хочу. Однако это работает только при первом перетаскивании. В следующий раз, когда я поеду, чтобы перетащить его, линейка возвращается к исходной позиции, затем, когда вы наводите на нее указатель, расстояние от места, где оно находилось до места, где он отскакивает, вычисляется, и он выпрыгивает с экрана, поскольку событие mouseup не срабатывает по мере перемещения прямоугольника. Я в основном хочу иметь возможность перетаскивать объект по экрану, сколько раз я хочу, но XStart и YStart должны принимать новые отображаемые значения при каждом нажатии.C# WPF RenderTransform сбрасывается на mousedown

Я думаю, что причина связана с e.GetPosition (this) .X; поскольку «это» относится к гриду, который является родителем правителей.

Нужно ли мне фиксировать 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

Похоже Mouse.GetPosition не работает при перемещении, как можно было бы ожидать.

This example кажется актуальным, но он использует событие DragOver вместо MouseMove, поэтому я не совсем уверен, что это та же ситуация.

+0

Вот что я понял, я просто не понимаю, почему это работает в первый раз. – gcoulby

+0

DragOver ничего не делает. Однако, спасибо за ссылку, Плюс я уже использую e.GetPosition над статическим Mouse.GetPosition, который, кажется, проблема с этой проблемой. – gcoulby