public static void Select(TextEditorData data, Action <TextEditorData> caretMoveAction) { using (var undoGroup = data.OpenUndoGroup()) { PositionChangedHandler handler = new PositionChangedHandler(data); data.Caret.PositionChanged += handler.DataCaretPositionChanged; StartSelection(data); caretMoveAction(data); data.Caret.PositionChanged -= handler.DataCaretPositionChanged; data.Caret.AutoScrollToCaret = true; data.Caret.PreserveSelection = false; data.ScrollToCaret(); } }