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 复制粘贴到每个应用程序时的完整摘要:
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" ) );
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 ) );
正确的
/* 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( ) );
在代码中,我将格式化文本生成到 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 复制粘贴到每个应用程序时的完整摘要:
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" ) );
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 ) );
正确的
/* 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( ) );