为什么在从流重新加载内容时 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
:它也可以保存和恢复图像。
问题:为什么下面的代码将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
:它也可以保存和恢复图像。