protected override void OnStrokeCollected(InkCanvasStrokeCollectedEventArgs e) { switch (_inkMode) { case InkMode.None: case InkMode.Ink: case InkMode.GestureOnly: case InkMode.InkAndGesture: case InkMode.Select: case InkMode.EraseByPoint: case InkMode.EraseByStroke: base.OnStrokeCollected(e); break; case InkMode.Rectangle: // Remove the original stroke and add a custom stroke. this.Strokes.Remove(e.Stroke); Stroke stroke = RectangleStroke.GetRectangleStroke(e.Stroke.StylusPoints); this.Strokes.Add(stroke); // Pass the custom stroke to base class' OnStrokeCollected method. InkCanvasStrokeCollectedEventArgs args = new InkCanvasStrokeCollectedEventArgs(stroke); base.OnStrokeCollected(args); break; default: break; } }