我需要添加TextRrange
来流式传输文档,而又不丢失在RichTextBox
中对其进行的格式化。
我收到RichTextBox.Text
并将其转换为字符串并丢失所有格式,但是我不想放弃从富文本框中读取的文本的格式。
TextRange t = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
String s = t.Text;
FlowDocument fd = new FlowDocument();
/*
this snippt works but looses formating
Paragraph p = new Paragraph();
p.Inlines.Add(s);
fd.Blocks.Add(p);
*/
fd.Blocks.Add(t); // cannot convert TextRange to Block
答案 0 :(得分:0)
最简单的方法是将所需的 TextRange
复制到内存块,然后使用 FlowDocument
方法将其附加到 TextRange.Load()
的末尾或将其加载到另一个 {{ 1}}。使用内存块就像复制到剪贴板一样,因此不存在性能问题:
MainWindow.xaml:
TextRange
MainWindow.xaml.cs:
<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>
由于数据格式设置为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
不仅可以包含格式化文本,还可以包含表格或图像,并且会以保留格式进行复制。< /p>