У меня есть собственный элемент управления WPF, который наследуется от RichTextBox. Я хочу иметь возможность изменять FlowDocument из richtextbox всякий раз, когда текст изменяется. Для демонстрации, скажем, что у нас есть это:WPF получить блок документов RichTextBox с измененным текстом
<MyCustomRichTextbox>
<FlowDocument>
<Paragraph>This is the first paragraph</Paragraph>
<Paragraph>And this is the second</Paragraph>
</FlowDocument>
</MyCustomRichTextbox>
и всякий раз, когда текст изменяется (например, кто-то типы в контроле), весь содержащий пункт окрашен в красный цвет.
Мне кажется, что две вещи, которые должны произойти, чтобы достичь этого:
- мне нужно каким-то образом получить блок, содержащий измененный текст из
MyCustomRichTextbox.Document.Blocks
- Мне нужно изменить этот блок
К сожалению, метод OnTextChanged не дает способа получить измененный блок. Я смог использовать LINQ и TextChangedEventArgs.Offset для получения блока, но я обеспокоен тем, что этот подход приведет к недопустимым замедлениям с большими документами (поскольку он должен перечислять каждый блок каждый раз, когда набирается символ). Есть ли лучший способ получить содержащий абзац?
Я знаю, что могу кэшировать ссылку на «Последний измененный блок» и проверить, не изменился ли он, но это не помогло бы в сценарии случайного доступа.