Нарисовать Ellipse под курсором мыши по центру. Не работает при смещении координат

Необходимо расположить точку для рисования под курсором, где острый край мыши находится по центру. При таком варианте точки на холсте не отрисовываются. Если установить без смещения, то всё работает.

введите сюда описание изображения введите сюда описание изображения

 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"/>

Ответы (1 шт):

Автор решения: aepot

Дело в том, что когда вы сдвигаете эллипс, то коодинаты мыши оказываются над эллипсом, и клик проходит именно в эллипс, а не в канвас. Вследствие чего обработчик Canvas_MouseLeftButtonDown вообще не вызывается. Да, Ellipse - это полноценный контрол, а не просто рисунок. Он тоже может обрабатывать клики по себе.

Чтобы это исправить, надо добавить прозрачность для кликабельности создаваемому эллипсу.

el.IsHitTestVisible = false;
→ Ссылка