需要将绘图点定位在光标下,鼠标的锐边在中心。使用此选项,画布上的点不会被绘制。如果您安装时没有偏移,那么一切正常。
public void DrawPoint(Point point, Canvas canvas)
{
Ellipse el = new Ellipse();
el.Width = 10;
el.Height = 10;
el.SetValue(Canvas.LeftProperty, point.X);
el.SetValue(Canvas.TopProperty, point.Y);
el.Fill = Brushes.Red;
// Добавление графического элемента на холст.
canvas.Children.Add(el);
}
private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point point = e.GetPosition(Canvas);
point.Offset(-5.0, -5.0);
DrawPoint(point, Canvas);
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if (Canvas.Children.Count !=0)
{
Canvas.Children.RemoveAt(Canvas.Children.Count - 1);
}
Point point = e.GetPosition(Canvas);
point.Offset(-5.0, -5.0);
DrawPoint(point, Canvas);
}
<Canvas
MouseMove="ContentPanel_MouseMove"
MouseEnter="ContentPanel_MouseEnter"
MouseLeave="ContentPanel_MouseLeave"
MouseLeftButtonDown="Canvas_MouseLeftButtonDown"
x:Name="Canvas"
Margin="0,10,0,0"
Panel.ZIndex="998"
HorizontalAlignment="Left"
VerticalAlignment="Top"/>


事实是,当您移动椭圆时,鼠标坐标位于椭圆上方,并且点击完全指向椭圆,而不是画布。结果,
Canvas_MouseLeftButtonDown根本不调用处理程序。是的,Ellipse这是一个成熟的控件,而不仅仅是一个绘图。它也可以自己处理点击。为了解决这个问题,我们需要为创建的椭圆添加透明度以提高可点击性。