Сначала отвечу на свой собственный вопрос, а то он путает всю тему:
Истинно так. Первый абзац относится целиком и полностью к
System.Windows.Forms.RichEditBox, а второй - к
System.Windows.Controls.RichEditBox.
Допустим, нужно сделать полужирным выделенный фрагмент текста. По документации нужно изменить свойство SelectionFont. Это сделать совсем несложно, но...
Хорошо, если вся изменяемая область написана одинаковым шрифтом. А вот если куда-то в серединке закрался, скажем, курсив или другой размер шрифта, или и вовсе другой шрифт? "Умный" .NET в свойстве SelectionFont даёт усреднённый результат, и если это свойство переписать (а переписать его можно только целиком, иначе ругается), то всё выделение будет оформлено одним шрифтом, Как же изменить только один атрибут оформления, не убив форматирования внутри текста? Если это можно сделать только посимвольно, то как?
Формсовый эдитбокс вообще умеет меньше и хуже, чем ВПФовый. Функции для работы с форматированием довольно бедны, но редактировать содержимое программно всё же можно, для этого нужно забрать текущее содержимое контрола через свойство
Rtf, переделать его как нужно и загнать обратно. Единственная проблема здесь - что содержимое это, как следует из названия свойства, представлено в формате RTF, и редактировать его напрямую несподручно. Но можно использовать библиотеки, например, NRtfTree, чтобы представить ртф в более наглядном виде, переделать, что надо, или даже экспортировать в другой формат. Но всех проблем это не решает, к примеру, в формсовом эдитбоксе никак нельзя напрямую узнать, какая часть текста выделена. А ещё у этого контрола большие проблемы с рисунками. То есть вставлять их можно только через DragAndDrop, настроив соответствующее свойство (или вручную в RTF
), при этому они отображаются на самом контроле как белые прямоугольники с надписью "Bitmap[JPEG, GIF, ...] Image" посередине. Если я не прав, поправьте, будет очень приятно.
И ещё. В документации есть интересный раздел про команды. Дескать, всё что нужно, это написать EditingCommands.ToggleBold и программа всё сделает сама. Но ни ApplicationCommands, ни EditingCommands студия при компиляции не распознаёт, да и обещанного свойства Command у кнопочек на панели инструментов нету. Под MSDN2008 статья находится в link removed,
Тут всё просто. Как в соседнем топике написал Pasha, за что ему спасибо, нужно просто поставить правильный
RichTextBox, и всё будет прекрасно работать.
Ну а теперь к новым вопросам, они будут касаться Windows.Controls.RichEditBox'а (WPF'овского):
1. Как узнать, какая часть текста выделена, применительно к структуре документа (чтобы знать, какие конкретно объекты затронуты, а не просто выделенную строку текста).
2. Как вставлять рисунки? В принципе, можно ручками, имея ответ на первый вопрос. Но может есть более простой способ?
3. Как вставлять гиперссылки? Аналогичино со вторым вопросом, благо есть класс
Hyperlink. Но как хотелось бы просто взять да и загиперлинкить выделенный текст одной функцией, не ковыряясь в бескрайних просторах документа!