WPF RichTextBox 在按下 'Enter' 键时清除了第一行文本

WPF RichTextBox cleared the firstline text when pressing the 'Enter' Key

我有一个 WPF 项目(带有 MVVM Light),其中包含一个 RichTextBox 控件和 Toolbar 如下图

我尝试将格式化的文本(用户可以将富文本框内容样式更改为'Bold'、'Italics'、'underline'或增大或减小字体大小)存储到sql精简版数据库。

我正在使用 TextRange class 来捕获 RichTextBox 内容。

 /* Get Richtext box text. */
 TextRange range;
 range = new TextRange(((FlowDocument)document).ContentStart,
                      ((FlowDocument)document).ContentEnd);
 /* Get Richtext box text. */

但如果文本是粗体或斜体,则无法捕获正确的文本。我用谷歌搜索了很多小时,但找不到适合我要求的正确方法。有想法的请指教

我不知道与格式文本框属性相关的格式数据存储在哪里,但 TextRange.Text 属性 只是一个原始文本字符串。

我的方法是提取原始 RTF 数据,然后 save/load 相应地这样做。这也具有能够在任何其他富文本编辑器(如 Microsoft Word)中打开的优点。

要获取 RTF 字符串表示,您可以使用此代码:

var ms = new MemoryStream();
var doc = RichTextBox.Document;
var range = new TextRange(doc.ContentStart, doc.ContentEnd);
range.Save(ms, DataFormats.Rtf);
string rtfString = ASCIIEncoding.Default.GetString(ms.ToArray());

//You can then save this string to the database or whatever you want...

要将 RTF 字符串加载回 RichTextBox,您可以使用此代码。

string rtfText = LoadTextFromDatabase() //However you read the saved string..
var ms = new MemoryStream(ASCIIEncoding.Default.GetBytes(rtfText));
RichTextBox.Selection.Load(ms, DataFormats.Rtf);

希望这对您有所帮助,并且是适合您的解决方案。