WPF 绘制点与线时的不同行为

WPF Different behaviour when drawing point versus line

我正在尝试从 canvas 上的图像中心到移动滚轮时鼠标的位置画一条线。

我有一个看起来像这样的函数:

// e is MouseWheelEventArgs
var position = e.GetPosition(canvas);
var x = Canvas.GetLeft(image) + image.ActualWidth / 2;
var y = Canvas.GetTop(image) + image.ActualHeight / 2;

Ellipse point = new Ellipse
{
    Margin = new Thickness(x, y, 0, 0)
};

Line line = new Line
{
    X1 = position.X,
    Y1 = position.Y,
    X2 = x,
    Y2 = y
};

canvas.Children.Add(point);
canvas.Children.Add(line);

点在指针位置正确绘制,线从图像中心绘制,但线绘制到的点不正确。这是为什么?

这是一张显示点和线位置的图像

我建议用 Geometries 来实现。

有了这样的XAML

<Canvas Background="Transparent" MouseWheel="Canvas_MouseWheel">
    <Image x:Name="image" Canvas.Left="0" Canvas.Top="0" Source="..."/>
    <Path x:Name="line" Stroke="Green" StrokeThickness="2"/>
    <Path x:Name="point" Fill="Red"/>
</Canvas>

事件处理程序可能如下所示:

private void Canvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
    var position = e.GetPosition((Canvas)sender);

    var center = new Point(
        Canvas.GetLeft(image) + image.ActualWidth / 2,
        Canvas.GetTop(image) + image.ActualHeight / 2);

    line.Data = new LineGeometry(center, position);
    point.Data = new EllipseGeometry(position, 3, 3);
}