Изменение поведения типа C# WPF RichtextBox

Недавно я преобразовал TextBox (который я использую в качестве окна поиска) в RichTextBox, чтобы выделить некоторые слова, содержащиеся в поле. При этом я заметил несколько «ошибок». Я хотел бы знать, являются ли они преднамеренными и как их обойти.

Первая и самая важная проблема возникает только тогда, когда я вызываю SelectAll() для поля, чтобы получить его информацию о событии keyDown:

((RichTextBox)sender).SelectAll();
string search = ((RichTextBox)sender).Selection.Text;

Это не позволяет мне писать больше символа в RTB. Я предполагаю, что он оставляет мой текст выделенным и перезаписывает его при каждом нажатии клавиши. Я не могу найти какой-либо метод DeSelect(), так что есть ли другой способ получить эти строковые данные, чтобы предотвратить эту проблему. Мне нужно, чтобы строка передавалась регулярному выражению.

Во-вторых, RTB бросает IBeam в коробку только по двойному щелчку. Есть ли способ воссоздать поведение TextBox, которое входит в один клик (или он должен входить в один клик по умолчанию?)


person Justin Grahn    schedule 19.11.2014    source источник


Ответы (1)


Вместо того, чтобы выбирать все, получите содержимое и преобразуйте потоковый документ в обычный текст.

FlowDocument doc =((RichTextBox)sender).Document;
string search = new TextRange(doc.ContentStart, doc.ContentEnd).Text;

Преобразовать FlowDocument в простой текст

person Paul Abbott    schedule 19.11.2014