// Undo the last stroke private void undo_click(object sender, RoutedEventArgs e) { CustomInkCanvas.CustomInkCanvas canvas = sender as CustomInkCanvas.CustomInkCanvas; Console.WriteLine("Undo count: {0}", canvas.Strokes.Count); int strokesDeleteIndex = canvas.Strokes.Count; string tag = (canvas == canvasRight) ? "Blue" : "Red"; while (strokesDeleteIndex > 0) { if (canvas.Strokes[strokesDeleteIndex - 1].GetPropertyData(metadataGuid) as string == tag) { if (tag == "Blue") { _undoRightStrokesStack.Push(canvasLeft.Strokes[strokesDeleteIndex - 1]); } else { _undoLeftStrokesStack.Push(canvasLeft.Strokes[strokesDeleteIndex - 1]); } // Remove the element canvasRight.Strokes.RemoveAt(strokesDeleteIndex - 1); canvasLeft.Strokes.RemoveAt(strokesDeleteIndex - 1); break; } strokesDeleteIndex--; } }
private void OnStylusPointsCollectedRight(CustomInkCanvas.CustomInkCanvas c, StylusPointCollection s) { Stroke stroke = new Stroke(s); stroke.DrawingAttributes = SetAttributes(Colors.Blue); canvasLeft.Strokes.Add(stroke); tempStrokeCollection.Add(stroke); }
// Redo last Undo operation private void redo_click(object sender, RoutedEventArgs e) { Console.WriteLine("Redo count: {0}", canvasLeft.Strokes.Count); CustomInkCanvas.CustomInkCanvas canvas = sender as CustomInkCanvas.CustomInkCanvas; Stack <Stroke> undoneStrokes = (canvas == canvasLeft) ? _undoLeftStrokesStack : _undoRightStrokesStack; int strokesCount = undoneStrokes.Count; if (strokesCount > 0) { var stroke = undoneStrokes.Pop(); canvasRight.Strokes.Insert(canvasRight.Strokes.Count, stroke); canvasLeft.Strokes.Insert(canvasLeft.Strokes.Count, stroke); } }