加载到WPF C# RichTextBox后,RTF布局发生了变化。

3

我有一个rtf文件,在word中打开时布局完美显示,但是当我尝试在我的wpf应用程序中的richtextbox中打开它时,布局会出现偏差,我希望保持相同。有没有办法做到这一点?是否可以采用不同的读取文件方式?

这是我用于加载rtf文件的代码

openFile.InitialDirectory = @"C:\";
openFile.Filter = "Text files (*.rtf)|*.rtf|All Files (*.*)|*.*";
openFile.RestoreDirectory = true;
openFile.Title = "Select Script";

if (openFile.ShowDialog() == true)
{
    string originalfilename = System.IO.Path.GetFullPath(openFile.FileName);

    TextRange range;
    FileStream fStream;

    if (openFile.CheckFileExists)
    {
         range = new TextRange(rtfMain.Document.ContentStart, rtfMain.Document.ContentEnd);
         fStream = new FileStream(originalfilename, System.IO.FileMode.OpenOrCreate);
         range.Load(fStream, DataFormats.Rtf);
         fStream.Close();
    }
}

and this is the xaml

 <RichTextBox IsReadOnly="True" x:Name="rtfMain" HorizontalAlignment="Left" Width="673" VerticalScrollBarVisibility="Visible"/>

这是原始内容的样子。

enter image description here

这是在WPF中Richtextbox的外观。

enter image description here


添加一张图片来展示为什么和如何“布局偏移”会比仅发布加载rtf的代码更有帮助。你怀疑代码中有错误吗? - Sinatr
我在想,也许有更好的方法来读取文档,在富文本框中能够更准确地显示它。 - Phil
刚刚添加了图片以说明问题。 - Phil
尝试保存RFT并与原始文件进行比较(您将需要使用一些十六进制查看器),也许这会给您一个线索,说明出了什么问题。如果两个RTF文件相同,则问题在于RichTextBox如何显示RTF。我发现第一个段落左侧有一个边距,似乎被忽略了。也许这是因为您在Load之前没有使用SelectAll() - Sinatr
1个回答

0

可以尝试这样写:

 if (openFile.CheckFileExists)
    {
      range = new TextRange(rtfMain.Document.ContentStart, rtfMain.Document.ContentEnd);
      using (var fStream = new StreamReader(originalfilename, Encoding.Default,true))
      {
        range.Text = fStream.ReadToEnd();
      }
    }

而在 XAML 中:

<RichTextBox IsReadOnly="True" x:Name="rtfMain" HorizontalAlignment="Left" 
                     Width="673" VerticalScrollBarVisibility="Visible" Height="250">
            <RichTextBox.Resources>
                <Style TargetType="{x:Type Paragraph}">
                    <Setter Property="Margin" Value="0"/>
                </Style>
            </RichTextBox.Resources>
        </RichTextBox>

它的显示效果如下: 在此输入图片描述

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接