Я использую следующий метод для замены текста в тексте RTF.
rtBox = new Lazy<RichTextBox>();
MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(rtfTextToBeReplaced));
TextRange tr = new TextRange(rtBox.Value.Document.ContentStart, rtBox.Value.Document.ContentEnd);
tr.Load(stream, DataFormats.Rtf);
string rtf;
using (var memoryStream = new MemoryStream())
{
tr.Save(memoryStream, DataFormats.Rtf);
rtf = ASCIIEncoding.Default.GetString(memoryStream.ToArray());
}
rtf = rtf.Replace("a", "B");
Результат:
{ \ rtf1 \ Bnsi \ Bnsicpg1252 \ uc1 \ htmButsp \ deff2 {\ fonttbl {\ f0 \ fchBrset0 Times New RomBn;} {\ f2 \ fchBrset0 Segoe UI;}} {\ colortbl \ red0 \ green0 \ blue0; \ red255 \ green255 \ blue255;} \ loch \ hich \ dbch \ pBrd \ plBin \ ltrpBr \ itBp0 {\ lBng1033 \ fs18 \ f2 \ cf0 \ cf0 \ ql {\ f2 {\ ltrch B} \ li0 \ ri0 \ sB0 \ sb0 \ fi0 \ ql \ pBr}}}
Можно ли заменить только текст, а не теги из richtextBox, но сохранить изображения, когда richtextBox содержит текст И изображения?
Если бы я использовал
tr.Load(new MemoryStream(Encoding.Default.GetBytes(rtfTextToBeReplaced)), DataFormats.Rtf);
temp = tr.Text.Trim();
temp = temp.Replace("a", "B");
, тогда он заменяет только richText текстом, а не richText изображениями и текстом.