Agar FlowDocumentPageViewer, FlowDocumentScrollViewer va FlowDocumentReader elementlari oqim hujjatini WPF da ko'rsatish uchun mo'ljallangan bo'lsa, uni tahrirlash uchun RichTextBox elementi ishlatiladi .
RichTextBox-ga faylni yuklash uchun XamlReader.Loadxaml tarkibini yuklaydigan usuldan foydalanishimiz mumkin. Biroq, rtf fayllari yoki oddiy matn kabi boshqa kontentni yuklash uchun biz rtf hujjatini FlowDocument obyektiga aylantiradigan TextRange sinfidan foydalanishimiz kerak .
RichTextBox bilan ishlash uchun quyidagi belgilashni aniqlaymiz:
if (ofd.ShowDialog() == true)
{
TextRange doc = new TextRange(docBox.Document.ContentStart, docBox.Document.ContentEnd);
using (FileStream fs = new FileStream(ofd.FileName, FileMode.Open))
{
if (Path.GetExtension(ofd.FileName).ToLower() == ".rtf")
doc.Load(fs, DataFormats.Rtf);
else if (Path.GetExtension(ofd.FileName).ToLower() == ".txt")
doc.Load(fs, DataFormats.Text);
else
doc.Load(fs, DataFormats.Xaml);
}
}
}
}
}
Faylni ochish uchun biz TextRange sinfidan foydalanamiz . Ushbu klass konstruktori hujjatning o'zgartirilishi kerak bo'lgan qismini belgilaydigan hujjatning boshlang'ich va yakuniy nuqtalarini parametr sifatida oladi. Bunday holda, biz butun hujjatni o'zgartiramiz, shuning uchun biz hujjatning boshini boshlang'ich nuqtasi, hujjatning oxirini esa yakuniy nuqta sifatida belgilaymiz.
Keyinchalik, tanlangan fayl bilan bog'langan oqimni olamiz va uni Load - usuli yordamida RichTextBox-ga yuklaymiz Load(fs,DataFormats.Rtf). Bu erda biz hujjat turini FlowDocument ob'ektiga to'g'ri aylantirish imkonini beruvchi DataFormats ro'yxatining qiymatini belgilaymiz.
Hujjatni saqlashda biz konstruktorda hujjatning boshi va oxirini qabul qiladigan TextRange obyektini ham yaratamiz. Keyin esa hujjatni kerakli formatda saqlash uchun Save usulidan foydalanamiz.
3-rasm.
Ammo bu holda xaml hujjatlari bilan ishlashda siz TextRange hujjatni ildiz tugun bilan yuklashi va saqlashini hisobga olishingiz kerak Section. Va agar yuklanishi kerak bo'lgan faylning tarkibi tuzilmasi jihatidan farq qiladigan bo'lsa, yana xaml fayllarini yuklash uchun boshqa usuldan foydalanishimiz mumkin:
FlowDocument document = System.Windows.Markup.XamlReader.Load(fs) as FlowDocument;
if (document != null)
docBox.Document = document;