Пользовательские Undo / Redo в WPF TextBox с правильным движением каретки - PullRequest
1 голос
/ 20 июля 2011

Я реализовал пользовательский стек Undo / Redo, и я пытаюсь заставить его работать с WPF TextBox.

Я отключил встроенный механизм Undo и подключил свою пользовательскую Undo с помощью Ctrl +З.Все работает отлично, примите, что курсор в TextBox всегда перемещается в индекс 0 при каждом отмене / повторении.Вопрос в том, как решить эту проблему?

Я пытался настроить пользовательское поведение на TextBox, который прослушивает TextChanged и локализует последнее изменение в текстовой строке.Но это работает, только если вы не начнете печатать одну и ту же букву несколько раз подряд.Метод my ломается.

В идеале мне нужно какое-то поведение, которое вносит только реальные изменения в свойство TextBox.Text.Как и сейчас, он полностью обновляется для каждой отмены, даже если удаляется только последняя введенная буква.Это, конечно, не удивительно, так как он слушает свойство Text в PresentationModel, которое вызывает PropertyChanged при отмене.

Но не было бы замечательно, если бы существовал какой-то более точный способ точно сказать, что изменилось со значением свойства, то есть только одна или пара букв были вставлены / удалены в строковом значении.Тогда TextBox может изменить только это, не обновляя все текстовое значение.Есть ли такой способ сообщить об этом TextBox уже или можно создать собственный TextBox, который будет вести себя таким образом?Тогда можно было бы точно указать точное местоположение новой каретки, не возвращая ее обратно к 0 для каждого свойства changechange-update!

...