簡體   English   中英

通過拖放在畫布上移動控件

[英]Moving a Control on a Canvas on Drag & Drop

我已經在畫布上放置了文本塊。 我使用以下代碼更改它們在鼠標拖動時的位置:

   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 Property設置為

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

但這也不會改變。

怎樣才能達到期望?

您不得使用Transform ...,而只能使用

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

因為變換只影響渲染

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM