#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. Нарисуйте отдельные пути. Вы не можете делать то, что пытаетесь сделать, без трюков.