最简单的方法是将所需的内容复制到内存块,然后使用该方法TextRange
将其附加到末尾或将其加载到另一个. 使用内存块就像复制到剪贴板一样,因此不存在性能问题:FlowDocument
TextRange.Load()
TextRange
MainWindow.xaml:
<Window ...
Title="MainWindow" Height="350" Width="400">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<RichTextBox x:Name="rtb" Margin="5">
<FlowDocument>
<Paragraph>
<Run>Paste some formatted document to here for testing...</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
<Button Grid.Row="1" Click="Copy_Click">Copy Selection</Button>
</Grid>
</Window>
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Copy_Click(object sender, RoutedEventArgs e)
{
var range = rtb.Selection;
if (!range.IsEmpty)
{
using (var stream = new MemoryStream())
{
range.Save(stream, DataFormats.XamlPackage);
var copyto = new TextRange(rtb.Document.ContentEnd, rtb.Document.ContentEnd);
copyto.Load(stream, DataFormats.XamlPackage);
}
}
}
}
由于数据格式设置为DataFormats.XamlPackage
不仅TextRange
可以包含格式化的文本,还可以包含表格或图像,并且将在保留格式的情况下进行复制。