Перемещение элемента управления на холсте при перетаскивании - PullRequest
0 голосов
/ 16 мая 2018

Я разместил текстовые блоки на холсте. Я меняю их положение при перетаскивании мышью, используя следующий код:

   protected bool isDragging;
   private Point clickPosition;

   private void txt_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
            isDragging = true;
            var draggableControl = sender as TextBlock;
            clickPosition = e.GetPosition(this);
            draggableControl.CaptureMouse();
    }

    private void txt_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        isDragging = false;
        var draggable = sender as TextBlock;
        draggable.ReleaseMouseCapture();
    }

    private void txt_MouseMove(object sender, MouseEventArgs e)
    {
        var draggableControl = sender as TextBlock;

        if (isDragging && draggableControl != null)
        {
            Point currentPosition = e.GetPosition(this.Parent as UIElement);

            var transform = draggableControl.RenderTransform as TranslateTransform;
            if (transform == null)
            {
                transform = new TranslateTransform();
                draggableControl.RenderTransform = transform;
            }

            transform.X = currentPosition.X - clickPosition.X;
            transform.Y = currentPosition.Y - clickPosition.Y;
        }
    }

Здесь я хочу получить новую позицию текстового блока, сохранить его и в следующий раз, когда приложение загрузится, элемент управления должен занять новую позицию. Я понимаю, что мой код не изменяет свойство Left & Top текстового блока, а вместо этого преобразует его. Следовательно, свойство Left и Top не будет изменено. Я пытался установить свойство Left и Top как

            draggableControl.SetValue(Canvas.LeftProperty, transform.X);
            draggableControl.SetValue(Canvas.TopProperty, transform.Y);

Но это также не меняет его.

Что можно сделать, чтобы достичь желаемого?

1 Ответ

0 голосов
/ 16 мая 2018

Вы не должны использовать Transform ... но только

draggableControl.SetValue(Canvas.LeftProperty, X);
draggableControl.SetValue(Canvas.TopProperty, Y);

потому что преобразование влияет только на рендеринг

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...