我如何只允许在圆形路径中拖动?

lor*_*ron 5 wpf

是否可以将拖动源限制为仅在拖动时在圆形路径的边界内移动?

Rei*_*ica 5

您不需要360点路径.相反,在拖动时,使用计算当前角度Math.Atan2(Y,X),然后在圆上生成点.您仍然需要计算centerradius调整大小并存储它们,或者在MouseMove中计算它们.

    private void UserControl_MouseMove(object sender, MouseEventArgs e)
    {
        if (!isDraggingMarker)
            return;
        var position = e.GetPosition(this);

        double angle = Math.Atan2(position.Y - center.Y, position.X - center.X);
        var closest = new Point(center.X + radius*Math.Cos(angle),
                                center.Y + radius*Math.Sin(angle));

        SetMarkerPosition(closest);
    }
Run Code Online (Sandbox Code Playgroud)