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);
希望这对您有所帮助,并且是适合您的解决方案。
我有一个 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);
希望这对您有所帮助,并且是适合您的解决方案。