Привет: я пытаюсь реализовать программно выбранный формат текста в WPF RichTextBox.
Следующий код из Как выбрать текст из RichTextBox и затем раскрасить его? это именно то, что я пытаюсь сделать Однако, насколько я могу судить, этот код предназначен для WinForms RichTextBox:
public void ColourRrbText(RichTextBox rtb)
{
Regex regExp = new Regex("\b(For|Next|If|Then)\b");
foreach (Match match in regExp.Matches(rtb.Text))
{
rtb.Select(match.Index, match.Length);
rtb.SelectionColor = Color.Blue;
}
}
Однако я застрял на том, как полностью преобразовать приведенный выше код в код, который WPF RichTextBox знает, как обрабатывать. Следующий код из wpf richtextbox selection с регулярным выражением предоставляет некоторые очень полезные рекомендации. Так вот где я нахожусь:
public static void ColorSpecificText(RichTextBox richTextBox)
{
var newRun = new Run(); // <-- I THINK I NEED TO RELATE THIS CODE TO MY textRange OR TO MY richTextBox, BUT NOT SURE / DON'T KNOW HOW TO DO IT
TextRange textRange = new TextRange(richTextBox.Document.ContentEnd, richTextBox.Document.ContentEnd);
Regex regex = new Regex(@"\b(For|Next|If|Then)\b");
foreach (Match match in regex.Matches(textRange.Text))
{
TextPointer start = newRun.ContentStart.GetPositionAtOffset(match.Index, LogicalDirection.Forward);
TextPointer end = newRun.ContentStart.GetPositionAtOffset(match.Index + match.Length, LogicalDirection.Backward);
if (start != null && end != null)
{
richTextBox.Selection.Select(start, end);
richTextBox.Selection.ApplyPropertyValue(Run.BackgroundProperty, "Red");
}
}
}
Например, при применении этого кода к WPF RichTextBox со строкой «Next Hello World» приведенный выше код не генерирует никаких ошибок, но не работать либо («Далее» не выделяется). У меня нет оснований полагать, что регулярное выражение будет проблемой, как я тестировал его на regex101.com. Я предполагаю, что я упускаю что-то в объявлении newRun и как связать это с textRange или richTextBox. Спасибо за любые рекомендации, как решить эту проблему.