【问题标题】:WPF RichTextBox cleared the firstline text when pressing the 'Enter' KeyWPF RichTextBox 在按下“Enter”键时清除了第一行文本
【发布时间】:2020-02-05 09:48:32
【问题描述】:

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

我尝试将格式化文本(用户可以将富文本框内容样式更改为“粗体”、“斜体”、“下划线”或增大或减小字体大小)到 sql lite 数据库。

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

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

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

【问题讨论】:

  • 您能否扩展“未捕获的正确文本”-您的意思是 range.Text 属性错误吗?
  • 对不起,我的意思是当我输入一些粗体或斜体样式的文本时,它没有捕获给定样式的文本。 'TextRange' 不捕获文本样式,仅捕获文本。
  • 啊,我明白了。我不确定范围格式的确切位置,但我认为您可能需要保存和加载原始 RTF 数据以实现您想要的,因为这将包含格式数据。如果您对这种方法感到满意,我会写一个答案?
  • 是的,请继续。

标签: c# .net wpf winforms richtextbox


【解决方案1】:

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

我的方法是提取原始 RTF 数据并相应地保存/加载。这还具有能够在任何其他富文本编辑器(例如 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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    相关资源
    最近更新 更多