WPF RichTextBox: программно форматирующий спецификацию c текста - PullRequest
0 голосов
/ 16 апреля 2020

Привет: я пытаюсь реализовать программно выбранный формат текста в 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. Спасибо за любые рекомендации, как решить эту проблему.

...