c #wpf将RichTextBox格式化为xml文档

时间:2016-12-06 16:32:12

标签: c# xml wpf formatting richtextbox

所以在WPF中我创建了一个RichTextBox并实现了能够格式化所选文本(粗体,未标出,字体等等)的功能,但现在我想将所有格式导出为XML文件,所以当我加载它时,加载的文件将给我相同的格式相同的文本。 我认为最好的方法是,如果我能找到RTB中有格式化的每个地方,然后将其保存为文本范围,但我不知道RTB是否有一种方法来查找文本的一部分已格式化。

这是我得到的: XAML:

<Button Name = "export" Click = "export_Click"/>
<RichTextBox x:Name="RTB"/>

和c#:

private void export_Click(object sender, RoutedEventArgs e){
    TextRange range = new TextRange();
    //here is where i want to access the formatted areas
    //something like: range = RTB.document.getBoldArea();
    //and then i could export what i got in the text range to a xml file
}

事先感谢愿意帮助的人!

1 个答案:

答案 0 :(得分:3)

您实际上可以直接访问XAML内容,这本身就是XML。您可以直接保存或将其转换/转换为您自己的架构。

获取RichTextBox的XAML:

static string GetXaml(RichTextBox rt)
{
    TextRange range = new TextRange(rt.Document.ContentStart, rt.Document.ContentEnd);
    MemoryStream stream = new MemoryStream();
    range.Save(stream, DataFormats.Xaml);
    string xamlText = Encoding.UTF8.GetString(stream.ToArray());
    return xamlText;
}

设置RichTextBox的XAML内容:

static void SetXaml(RichTextBox rt, string xamlString)
{
    StringReader stringReader = new StringReader(xamlString);
    XmlReader xmlReader = XmlReader.Create(stringReader);
    Section sec = XamlReader.Load(xmlReader) as Section;
    FlowDocument doc = new FlowDocument();
    while (sec.Blocks.Count > 0)
        doc.Blocks.Add(sec.Blocks.FirstBlock);
    rt.Document = doc;
}