拖动用户控件

时间:2016-07-15 00:46:34

标签: c# wpf

我正在尝试使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的意义上)。

解决方案可能很明显,但我只是没有看到它。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

使用LayoutTransformRenderTransform仅使UIElement“看起来像”它处于新位置。这意味着第一次事件触发(第一次移动)时,它按预期工作,但此后,位置仍处于原始位置,但它被渲染转换为看起来已移动 - 这使您的移动事件疯了。

在我看来,将控件包装在Canvas中仍然更好。通常不建议使用LayoutTransform