2014-02-20 6 views
0

Я сделал два richtexbox, один маленький richtexbox, вложенный в большой richtextbox с помощью BlockUIContainer, см. В файле XAML ниже.Как сохранить содержимое RichTextBox в BlockUIContainer, в файл RTF?

<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> 

Я хочу, чтобы содержимое richtexbox сохранялось в RTF-файле. Обычно мы можем использовать TextRange (richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd), так как теперь у нас есть вложенный richtexbox, поэтому я думаю, что TextRange, вероятно, не работает. И, возможно, я добавлю некоторые изображения в richtextbox, поэтому я хочу попробовать двоичный поток, см. Ниже. «first» - это имя большого richtextbox. ПУТЬ - это путь к файлу 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 простой текст в сохраненном файле, я хочу его показать как нормальный документ слова, см. ниже. и, вероятно, также видят линию границы малого RichTextBox (эта граница оленья кожа будет показано ниже)

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

Что я должен делать? или вложенный richtextbox от BlockUIContainer невозможно показать так?

ответ

1

Вы можете сделать это, сохранив его и указав формат. Я опускаю ненужный код, но просто заменяю memystream тем, что у вас есть.

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

XamlWriter сохранит его в формате XAML

+0

Благодаря LLL, используя DataFormats.Rtf, текст большой RichTextBox показан в файле, но маленький RichTextBox полностью исчез. Я думаю, что, возможно, этот способ не может обрабатывать вещи внутри BlockUIContainer ... XamlWriter может хранить вещи внутри BlockUIContainer, но я не знаю, как сделать поток правильно отображаемым в сохраненном файле ... – user3339999

+0

Почему бы вам не захватить Документ Richtextbox, получить блок, затем удалить BlockUIContainer и прочитать его в Flowdocument –

Смежные вопросы