我正在尝试使UserControl拖动,我陷入困境,我不明白为什么。
基于这里的答案:How to drag a UserControl inside a Canvas
这部分代码是我被困的地方:
private void Control_MouseMove(object sender, MouseEventArgs e)
{
var userControl= sender as UserControl;
Point currentPosition = e.GetPosition(userControl);
var transform = userControl.RenderTransform as TranslateTransform;
if (transform == null)
{
transform = new TranslateTransform();
userControl.RenderTransform = transform;
}
transform.X = currentPosition.X - clickPosition.X;
transform.Y = currentPosition.Y - clickPosition.Y;
}
}
当拖动时,控件会从其新位置前后移动到它的旧位置。
当我将上述代码更改为:
Point currentPosition = e.GetPosition(null);
拖动工作没有跳回到原始位置,但显然偏移。有问题的UserControl没有父控件(在this.Parent为null的意义上)。
解决方案可能很明显,但我只是没有看到它。有什么想法吗?
答案 0 :(得分:3)
使用LayoutTransform
。 RenderTransform
仅使UIElement“看起来像”它处于新位置。这意味着第一次事件触发(第一次移动)时,它按预期工作,但此后,位置仍处于原始位置,但它被渲染转换为看起来已移动 - 这使您的移动事件疯了。
在我看来,将控件包装在Canvas中仍然更好。通常不建议使用LayoutTransform
。