首页 文章

如何将BlockUIContainer中的RichTextBox内容保存到RTF文件?

提问于
浏览
0

我使用BlockUIContainer创建了两个richtexbox,一个嵌入大型richtextbox的小richtexbox,请参阅下面的XAML文件 .

<RichTextBox IsDocumentEnabled="True"  x:Name="first" HorizontalAlignment="Left" Height="174" Margin="120,136,0,0" VerticalAlignment="Top" Width="254" TextChanged="first_TextChanged" MouseDoubleClick="first_MouseDoubleClick">
        <FlowDocument>
            <Paragraph>
                <Run Text="RichTextBox"/>
            </Paragraph>
            <BlockUIContainer>
                <RichTextBox IsReadOnly="True" x:Name="second"  MouseDoubleClick="second_MouseDoubleClick" Width="239" TextChanged="second_TextChanged">
                    <FlowDocument>
                        <Paragraph>
                            <Run Text="RichTextBox1"/>
                            <Run Language="en" Text="hh"/>
                        </Paragraph>
                    </FlowDocument>
                </RichTextBox>
            </BlockUIContainer>
        </FlowDocument>
    </RichTextBox>

我想要保存在RTF文件中的richtexbox的内容 . 通常我们可以使用TextRange(richTextBox.Document.ContentStart,richTextBox.Document.ContentEnd),因为现在我们已经嵌套了richtexbox,所以我认为TextRange可能无法正常工作 . 也许我会在richtextbox中添加一些图像,所以我想尝试二进制流,见下文 . “first”是big richboxbox的名称 . PATH是RTF文件的路径 .

FlowDocument document = first.Document;
System.IO.Stream ms = new System.IO.MemoryStream();
System.Windows.Markup.XamlWriter.Save(document, ms);
byte[] data = new byte[ms.Length];
ms.Position = 0;
ms.Read(data, 0, data.Length);
ms.Close();
File.WriteAllBytes(THE PATH, data);

但是在保存的RTF文件中,当我打开它时,它显示如下,

<FlowDocument PagePadding="5,0,5,0" AllowDrop="True"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <Paragraph>RichTextBox</Paragraph><Paragraph><Run xml:lang="en">test test test!!!</Run></Paragraph><BlockUIContainer><RichTextBox IsReadOnly="True" Name="second" Width="239"><FlowDocument PagePadding="5,0,5,0" AllowDrop="True"><Paragraph>RichTextBox1<Run xml:space="preserve"> </Run><Run xml:lang="en">hhthis is a small richtextbox</Run></Paragraph><Paragraph><Run xml:lang="en" xml:space="preserve" /></Paragraph></FlowDocument></RichTextBox></BlockUIContainer></FlowDocument>

我不想在保存的文件中看到XAML纯文本,我希望它像普通的word文档一样显示,见下文 . 并且可能还会看到小richtextbox的边界线(此边框线未显示在下方)

RichTextBox
test test test!!!
RichTextBox1 hhthis is a small richtextbox

我该怎么办? BlockUIContainer或嵌套的richtextbox是不可能这样显示的?

1 回答

  • 1

    您可以通过保存并指定格式来完成 . 我省略了不必要的代码,但只是将内存流替换为您现有的代码 .

    richTextBox.SelectAll();
    richTextBox.Selection.Save(new MemoryStream(), DataFormats.Rtf);
    

    XamlWriter 将其保存为XAML格式

相关问题