WPF Как динамически рисовать одну фигуру поверх другой с помощью Path и Geometry Group

#c# #wpf

#c# #wpf

Вопрос:

Я пытаюсь создать приложение для домашнего задания, которое добавляет прямоугольную геометрию к path.data в качестве дочерних элементов GeometryGroup, а затем обновляет размер, удерживая нажатой кнопку мыши и перемещая мышь, а затем завершает его при наведении курсора мыши. Проблема в том, что мне нужно, чтобы последующие прямоугольники были нарисованы поверх предыдущих. Установка FillRule в ненулевое значение этого не делает, потому что он по-прежнему показывает обводку нижележащих прямоугольников. Итак, как я могу это сделать?

     private void path_MouseDown(object sender, MouseButtonEventArgs e)
    {
        path.Stroke = strokeColor;
        path.Fill = fillColor;
        path.StrokeThickness = thickness;
        p = Mouse.GetPosition((UIElement)sender);
        gg = path.Data as GeometryGroup;                                    

        gg.Children.Add(new RectangleGeometry());

    }

    private void path_MouseMove(object sender, MouseEventArgs e)
    {
        if (p == null) return;
        var pp = Mouse.GetPosition((UIElement)sender);
        gg = path.Data as GeometryGroup;
        if (index == 0)
        {
            var pg = gg.Children.Last() as RectangleGeometry;
            pg.Rect = new Rect(p.Value, pp);
        }
        else if(index == 1)
        {
            var pg = gg.Children.Last() as RectangleGeometry;
            pg.RadiusX = pp.X - p.Value.X;
            pg.RadiusY = pp.Y - p.Value.Y;
            pg.Rect = new Rect(p.Value, pp);
        }

    }

    private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
    {
        p = null;
    }
  

Комментарии:

1. «Мне нужно, чтобы последующие прямоугольники были нарисованы поверх предыдущих». Означает ли это, что вы хотите заменить последнюю прямоугольную геометрию на новую? Нравится gg.Children[gg.Children.Count - 1] = new RectangleGeometry() .

2. Нарисуйте отдельные пути. Вы не можете делать то, что пытаетесь сделать, без трюков.