在wpf上,爲了在畫布上拖動和移動項目(形狀,子畫布),我已經實施了針對問題的答案:How to drag a UserControl inside a Canvas。然而,由於正確地指出了同樣的問題的答案旁邊還有裏面的方法有缺陷,更改形狀的實際位置
private void Control_MouseMove(object sender, MouseEventArgs e)
{
var draggableControl = sender as UserControl;
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;
}
}
它使用不永久改變項目的位置RenderTranform但它的可視位置來代替。結果是該項目僅在下一個鼠標事件時返回到其初始位置,所以拖放操作無法正常進行(您不能以這種方式實際移動它,但僅在視覺上)。應對其進行何種修改糾正方法的功能?還有一種類似的做法能夠正確執行任務嗎?我應該使用另一種變換,如佈局變換?
控件的位置被重置的事實與RenderTransform的使用無關,如果有的話只是不好的編碼。 –
查看http://msdn.microsoft.com/en-us/library/system.windows.uielement.rendertransform.aspx中的備註。它講述的是一種「暫時效應」。 – arjacsoh
這並不改變這樣一個事實,即一個*可以*持續寫入拖動功能。 –