Я пытаюсь создать текстовый редактор, который форматирует текст в соответствии с заданными правилами. Например, определенные (предварительно определенные) слова должны быть подчеркнуты или окрашены в красный цвет и т. Д., Поэтому при каждом нажатии на пробел программа проверяет, подходит ли слово для форматирования, и форматирует по мере необходимости. Проблема в том, что я не могу понять, как редактировать текст по словам.
Я создал событие, которое следит за местом для нажатия:
private void MainTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Space)
wordAnalyser.AnalyseWord();
}
(wordAnalyser является экземпляром класса WordAnalyser)
В WordAnalyser я получаю слово (код, набранный из другого SO вопроса , спасибо @King King):
string word = null;
string fullText = new TextRange(MainTextBox.Document.ContentStart, MainTextBox.Document.ContentEnd).Text;
int startIndexOfWord = fullText.TrimEnd().LastIndexOf(' ');
if (startIndexOfWord != -1)
{
word = fullText.Substring(startIndexOfWord + 1).TrimEnd();
}
И теперь единственное решение, которое приходит мне в голову, - это получить весь текстовый блок, снять последнее слово, отформатировать его, вставить обратно и вставить все это обратно в текстовое поле, но это такой грязный способ сделать это.
Мне интересно, есть ли способ отформатировать слово прямо в поле richtextbox, не касаясь остальной части текста. Я новичок в WPF, поэтому не очень знаком с его возможностями, но я осмотрелся и, похоже, никто не задавался этим вопросом.
Есть идеи?