PeejayAdams Ответов: 1

Защита текста в WPF richtextbox


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

Кто-нибудь знает надежный способ защиты текста в RichTextBox?

Что я уже пробовал:

Я пробовал ловить события MouseDown на отдельных блоках документа потока, и это, кажется, работает большую часть времени, но если я несколько раз щелкну и перетащу мышью, то в конечном итоге смогу выделить часть "защищенного" текста. Любопытно, что когда это происходит, Snoop не показывает никаких дополнительных событий, и я не вижу никакой закономерности в том, когда это происходит, а когда нет.

На самом деле это не было бы хорошим решением, даже если бы оно работало так, как задумано, потому что это не помешало бы перетаскиванию подсветки из соседнего незащищенного блока.

В разметке RTF есть атрибут protect, но я не вижу никакого способа добавить его при добавлении блока в код, и идея манипулировать RTF-кодом с помощью регулярных выражений звучит как пожизненная задача. Я подозреваю, что мне придется разбивать защищенные и незащищенные части документа на отдельные элементы управления, но это было бы крайне неопрятно и все равно оставило бы проблемы с областями, где мне просто нужно защищать части текста, а не целые блоки или абзацы.

1 Ответов

Рейтинг:
2

Leo Chapiro

Это не совсем ясно, чего вы пытаетесь достичь.
Можете ли вы использовать два ричбокса, один как поле только для чтения, чтобы показать" постоянный " контент, а другой рядом / ниже с редактируемым контентом?
Как только пользователь будет готов, вы просто объедините содержимое обоих элементов управления.

Решит ли этот простой трюк проблему?

[ОТРЕДАКТИРОВАННЫЙ]
Пожалуйста, взгляните на это решение: Строку защиты в управления richtextbox .

Предложение:

Почему бы вам не использовать элемент управления внутри окна RichText? вы можете вставлять кнопки и другие элементы управления, поэтому я думаю, что вставка метки или текстового блока может сделать то, что вам нужно.


Ответ:
Я попытался поместить некоторые элементы управления в RichTextBox и добавил некоторый код для защиты элементов управления от удаления, и это сработало.


PeejayAdams

Документ, о котором идет речь, представляет собой сводку оценки - это потенциально очень большой документ, содержащий комбинацию деталей заголовка, текстовых блоков, детализированных действий с часами и ценами и различными полями комментариев. В настоящее время сводка выходит так, как она генерируется из данных, введенных в другом месте приложения, но мы хотели бы, чтобы люди добавляли к сгенерированным частям документа, но не касались ничего, что связано с сохраненными данными - например, мы не хотим, чтобы люди непреднамеренно добавляли цифру к цене.

Leo Chapiro

Пожалуйста, взгляните на это решение: Строку защиты в управления richtextbox Дело в том, что вы можете использовать такие элементы управления, как метки внутри поля RichText ...

PeejayAdams

Спасибо, я действительно посмотрел на этот маршрут - и, возможно, мне придется вернуться туда в какой - то форме-он не идеален, потому что я просто не могу предсказать все места, где пользователь может захотеть что-то вставить. Это также проблематично, поскольку делает любые глобальные изменения форматирования несколько затруднительными - это документ, ориентированный на клиента, поэтому он должен быть WYSIWYG.