// thanks to this
at stackoverflow
<Canvas Background="Transparent"
MouseLeftButtonDown="CanvasMouseLeftButtonDown"
MouseLeftButtonUp="CanvasMouseLeftButtonUp"
MouseMove="CanvasMouseMove">
<!-- shapes are added to this Canvas -->
</Canvas>
private Shape shape;
private void CanvasMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
shape = e.OriginalSource as Shape;
}
private void CanvasMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
shape = null;
}
private void CanvasMouseMove(object sender, MouseEventArgs e)
{
if (shape != null)
{
var canvas = (Canvas)sender;
var pos = e.GetPosition(canvas);
var center = shape.TranslatePoint(
new Point(shape.ActualWidth / 2, shape.ActualHeight / 2),
canvas);
if (shape.RenderTransform is not RotateTransform transform)
{
transform = new RotateTransform();
shape.RenderTransform = transform;
shape.RenderTransformOrigin = new Point(0.5, 0.5);
}
transform.Angle = -Vector.AngleBetween(pos - center, new Vector(1, 0));
}
}