Я нашел ошибку в классе WPF Richtextbox.
<UserControl x:Class="RtbControl.WpfRichTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:RtbControl"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<RichTextBox x:Name="Rtb" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
</RichTextBox>
</Grid>
</UserControl>
Кодовый код:
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Documents;
namespace WpfAppCore
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var path = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Body.rtf");
var rawRtf = File.ReadAllText(path);
Rtb.Document.Blocks.Clear();
var tr = new TextRange(Rtb.Document.ContentStart, Rtb.Document.ContentEnd);
using (var stream = new MemoryStream())
{
var bytes = Encoding.Default.GetBytes(rawRtf);
stream.Write(bytes, 0, bytes.Length);
stream.Position = 0;
tr.Load(stream, DataFormats.Rtf);
Rtb.CaretPosition = Rtb.CaretPosition.DocumentStart;
}
}
}
}
Файл "Body.rtf" был создан в Word и имеет два абзаца с двойным интервалом. Однако этот интервал теряется при загрузке файла.
Если я загружаю файл в элемент управления richtextbox winforms, интервал сохраняется, и я даже могу изменить его, используя метод SendMessage user32.dll.
Это то, что мне нужно в моем приложении, и оно заставит меня отказаться от подхода WPF, если я не смогу обойти его. Есть ли способ довести это до сведения MS, чтобы увидеть, могут ли они либо объяснить мне, что я делаю неправильно, либо хотя бы объяснить, что происходит под одеялом?