Я использую следующий код, чтобы нарисовать линию на холсте wpf, и я бы хотел нажать кнопку «отменить», чтобы удалить последнюю добавленную строку ,Отмените линию, нарисованную на холсте wpf (C#)
private void Canvas_MouseDown_1(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (e.ButtonState == MouseButtonState.Pressed) {
currentPoint = e.GetPosition(this);
}
}
private void Canvas_MouseMove_1(object sender, System.Windows.Input.MouseEventArgs e)
{
SolidColorBrush brush = new SolidColorBrush(Colors.Red);
if (e.LeftButton == MouseButtonState.Pressed)
{
Line line = new Line();
line.Stroke = brush;
line.StrokeThickness = 3;
line.X1 = currentPoint.X;
line.Y1 = currentPoint.Y;
line.X2 = e.GetPosition(this).X;
line.Y2 = e.GetPosition(this).Y;
currentPoint = e.GetPosition(this);
paintSurface.Children.Add(line);
}
}
Как я пытался сделать это путем удаления детей из холста (paintSurface), который, кажется, путь. Однако, когда я рисую линию, она состоит из множества маленьких детских линий (больше похожих точек), и я только стираю их по одному. Вот что это частичное решение выглядит следующим образом:
private void button5_Click(object sender, RoutedEventArgs e)
{
if (paintSurface.Children.Count != 0)
paintSurface.Children.RemoveAt(paintSurface.Children.Count - 1);
}
я должен был бы быть в состоянии получить индекс первого ребенка каждой строки я рисую и хранить их, так что я могу стереть все дети после этого. Есть идеи ? Заранее спасибо !
EDIT:
Я нашел способ, чтобы ответить на мою проблему, но я не буду отмечать его в ответ, как это очень некрасиво. Лучшим способом было бы, как предложил Клеменс, использовать Polylines (он описывает, как в комментарии):
На mouseDown Я прочитал количество детей на холсте, на mouseUp Я прочитал его снова, чтобы узнать количество детей моя линия создана. Я добавляю это в список, затем, когда я нажимаю кнопку отмены, я удаляю столько же детей, сколько последний элемент моего списка и удаляю этот элемент.
Он работает как шарм, хотя ...
Вместо добавления отдельных объектов Line при перемещении мыши вы должны создать Polyline на мыши вниз и добавить точки к Polyline при перемещении мыши. При стирании вы просто удалите последний дочерний элемент Polyline с Canvas. – Clemens
О, это похоже на хорошую идею. Я постараюсь сделать это. –
Вам даже не нужно держать 'currentPoint' :-) – Clemens