Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#wpf将RichTextBox格式导出为xml文档_C#_Xml_Wpf_Formatting_Richtextbox - Fatal编程技术网

c#wpf将RichTextBox格式导出为xml文档

c#wpf将RichTextBox格式导出为xml文档,c#,xml,wpf,formatting,richtextbox,C#,Xml,Wpf,Formatting,Richtextbox,因此,在WPF中,我创建了一个RichTextBox,并实现了能够格式化所选文本(粗体、非粗体、字体等)的功能,但现在我想将所有格式导出到一个XML文件中,因此当我加载它时,加载的文件将给我相同格式的相同文本。 我认为最好的方法是,如果我能找到RTB中有格式的每个地方,然后将其保存为一个文本范围,但我不知道RTB是否有一种方法来查找文本的一部分是否已格式化 以下是我得到的: xaml: 提前感谢任何愿意帮助的人 您实际上可以直接访问XAML内容,它本身显然就是XML。您可以直接保存它,也可以将其

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

以下是我得到的: xaml:


提前感谢任何愿意帮助的人

您实际上可以直接访问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;
}
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;
}
要设置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;
}
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;
}