c# wpf 将 RichTextBox 格式导出到 xml 文档
c# wpf export RichTextBox formatting to xml document
所以在 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
}
提前感谢任何愿意提供帮助的人!
您实际上可以直接访问 XAML 内容,这显然是 XML。您可以直接将其保存或 manipulate/translate 将其保存到您自己的架构中。
获取 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;
}
所以在 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
}
提前感谢任何愿意提供帮助的人!
您实际上可以直接访问 XAML 内容,这显然是 XML。您可以直接将其保存或 manipulate/translate 将其保存到您自己的架构中。
获取 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;
}