У меня возникла проблема с этим кодом. Когда я запускаю программу, 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;
}
Вот что я понял, я просто не понимаю, почему это работает в первый раз. – gcoulby
DragOver ничего не делает. Однако, спасибо за ссылку, Плюс я уже использую e.GetPosition над статическим Mouse.GetPosition, который, кажется, проблема с этой проблемой. – gcoulby