RichTextBox 不会将新行复制到剪贴板

RichTextBox does not copy new lines to the clipboard

在代码中,我将格式化文本生成到 WPF RichTextBox 中。我使用 Environment.NewLine 来插入换行符。一切看起来都很好。但是,当我将 RichTextBox 的内容复制到剪贴板(使用 RichTextBox 上下文菜单)并将其粘贴到 Word 或写字板时,换行符消失了。但是,如果我将剪贴板的内容粘贴为纯文本(例如粘贴到记事本中),新行不会消失。不知道为什么会这样?

更新:

// _richTextBox is my object RichTextBox
var doc = _richTextBox.Document;
var paragraph = doc.Blocks.FirstOrDefault() as Paragraph;
if (paragraph == null) return;

var span = new Span();
span.Inlines.Add(new Underline(new Run($"Header: {Environment.NewLine}")));
span.Inlines.Add(new Run("Text content"));

paragraph.Inlines.Add(span);

最终解决方案很简单。我没有注意到有一个 LineBreak 对象。如果您使用 LineBreak 而不是 \r\n (Environment.NewLine),那么换行符在纯文本和格式化文本中都有效。

我正在使用 RichTextBox,客户端必须是 copy-paste 和 Word 应用程序。令我惊讶的是,Environment.NewLine 不起作用。您必须插入 paragraph.Inlines.Add( new LineBreak( ) );

这是从 RichTextBox 复制粘贴到每个应用程序时的完整摘要:

  1. wrong-est\n 不适用于任何应用程序,除非它支持换行,例如 Notepad++

         var doc = m_RichTextBox.Document;
         doc.Blocks.Clear( );
         var p = new Paragraph( );
         doc.Blocks.Add( p );
    
         p.Inlines.Add( new Run( "Line1\n" ) );
         p.Inlines.Add( new Run( "Line2\n" ) );
         p.Inlines.Add( new Run( "Line3\n" ) );
    
  2. Environment.NewLine 记事本说可以,但 Word 仍然决定抗议。

         /* Same setup code omitted .... */
         p.Inlines.Add( new Run( "Line1" + Environment.NewLine ) );
         p.Inlines.Add( new Run( "Line2" + Environment.NewLine ) );
         p.Inlines.Add( new Run( "Line3" + Environment.NewLine ) );
    
  3. 正确的

         /* Same setup code omitted .... */
         p.Inlines.Add( new Run( "Line1" ) );
         p.Inlines.Add( new LineBreak( ) );
         p.Inlines.Add( new Run( "Line2" ) );
         p.Inlines.Add( new LineBreak( ) );
         p.Inlines.Add( new Run( "Line3" ) );
         p.Inlines.Add( new LineBreak( ) );