#c# #wpf #multi-touch #stroke #inkcanvas
#c# #wpf #мультитач #обводка #inkcanvas
Вопрос:
У меня есть приведенный ниже код
private void inkCanvas1_OnTouchMove(object sender, TouchEventArgs touchEventArgs)
{
StylusShape EraseShape = (StylusShape)new RectangleStylusShape(20, 20, 0);
List<Point> enumrator = new List<Point>();
TouchPoint touchPoint = touchEventArgs.GetTouchPoint(this);
enumrator.Add(new Point(touchPoint.Position.X, touchPoint.Position.Y));
inkCanvas1.Strokes.Erase(enumrator, EraseShape);//**reverse operation of this statement**
}
и я хочу отменить стертые штрихи после выполнения операции отмены.
Я попробовал приведенный ниже код события. но когда я стираю несколько штрихов, эта логика работает плохо.
System.Windows.Ink.StrokeCollection addedStrokes;
System.Windows.Ink.StrokeCollection removedStrokes;
bool undoRedoInProcess = false;
private void Strokes_StrokesChanged(object sender, System.Windows.Ink.StrokeCollectionChangedEventArgs e)
{
if (undoRedoInProcess)
{
addedStrokes = e.Added;
removedStrokes = e.Removed;
}
}
private void Undo()
{
undoRedoInProcess = true;
inkCanvas1.Strokes.Remove(removedStrokes);
inkCanvas1.Strokes.Add(addedStrokes);
undoRedoInProcess = false;
}
private void Redo()
{
undoRedoInProcess = true;
inkCanvas1.Strokes.Add(addedStrokes);
inkCanvas1.Strokes.Remove(removedStrokes);
undoRedoInProcess = false;
}
Комментарии:
1. @clemens пожалуйста, проверьте, что я обновил код.
2. Так что же именно не работает? Вы не показали нам ничего, что связано с потенциальной функцией отмены.
3. Я хочу отменить исходные штрихи после удаления штрихов из Inkcavnas. inkCanvas1.Strokes. Erase(enumrator, EraseShape);//обратная операция этого оператора.
4. Уверен, что вы этого хотите. Что вы пытались реализовать? Когда вы пишете » эта логика работает плохо «, должно быть что-то…
5. Привет, Сандип, у Microsoft нет события отмены штриха для inkcanvas. Вы можете обрабатывать операции отмены повтора программно. Ссылка на операцию отмены-повтора UWP inkcanvas приведена ниже: ссылка