为什么在从流重新加载内容时 WPF RichTextBox 中的行高会发生变化

Why LineHeight gets changed in WPF RichTexBox when reloading its content from a stream

问题:为什么下面的代码将WPF RichTexBox中的默认值LineHeight改为0?解决问题的正确方法是什么?

Xaml 对于 RichTextBox:

<RichTextBox x:Name="rtbTest" AcceptsTab="True" FontFamily="Calibri"/>

从流中重新加载 RichTexBox 内容的代码:

TextRange textRange = new TextRange(rtbTest.Document.ContentStart, rtbTest.Document.ContentEnd);
string rtf;
using (var memoryStream = new MemoryStream())
{
    textRange.Save(memoryStream, DataFormats.Rtf);
    rtf = ASCIIEncoding.Default.GetString(memoryStream.ToArray());
}

//rtf = rtf.Replace("abcd", "rstu");

using (MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(rtf)))
{
    rtbTest.SelectAll();
    rtbTest.Selection.Load(stream, DataFormats.Rtf);
}

运行以上代码前的RichTexBox截图:

运行 上述代码后的 RichTexBox 截图:

您注意到默认值 LinHeight 已更改为 0。

DataFormats.Rtf 格式不保留行间距。请改用 DataFormats.Xaml(不支持图片)。甚至 DataFormats.XamlPackage:它也可以保存和恢复图像。