我用            TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
            using (MemoryStream ms = new MemoryStream())
            {
                textRange.Save(ms, System.Windows.DataFormats.Rtf);
                ms.Seek(0, SeekOrigin.Begin);
                StreamReader sr = new StreamReader(ms);
                var rtf = sr.ReadToEnd();
                File.WriteAllText("rtfsample.rtf", rtf);
            }导出RichTextBox内容
然后用Word打开,发现Margin都无效了
然后再用            var fs = new FileStream("rtfsample.rtf", FileMode.Open, FileAccess.Read);            StreamReader streamReader = new StreamReader(fs, System.Text.Encoding.UTF8);            using (fs)
            {
                TextRange text = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
                text.Load(fs, DataFormats.Rtf);
            }
            streamReader.Dispose();
            streamReader = null;
            fs.Dispose();
            fs = null;Load回来后发现Margin全为"0,0,0,0"

解决方案 »

  1.   

    rtf没有Margin属性,你需要另外保存FlowDocument的其余属性。
      

  2.   

    先去了解rtf的格式
    http://baike.baidu.com/view/18817.htm
      

  3.   

    http://www.microsoft.com/en-us/download/details.aspx?id=10725
      

  4.   

    rtf可以用\sa \sb来控制段落的间距。
    http://msdn.microsoft.com/en-us/library/aa140283(v=office.10).aspx#rtfspec_20我试了导出到rtf后,margin是保留的。从rtf再读入后margin也是正确的。你会看到导入、导出前后段落间隔不一致,这是因为如果不写margin,导出后margin缺省就是0。而在rtb中,如果不写margin,缺省是字体高度*行间距。你可以把paragraph的缺省margin设成0,这样rtb和word中就可以看到同样的效果。
    或者可以在导入rtf后,取得document的xaml,然后删掉里面的 Margin="0,0,0,0" 这样的字符串,再重新装载,这样可以让导出/导入前后的效果一致。