2016-12-06 63 views
2

所以在WPF中,我創建了一個RichTextBox並實現了能夠格式化選定文本(粗體,下劃線,字體等)的功能,但是現在我想將所有的格式導出到XML文件,所以當我加載它時,加載的文件會給我相同格式的文本。 我認爲最好的方法是,如果我可以找到每個地方在RTB格式化,然後將其保存爲文本範圍,但我不知道RTB是否有一種方法來查找是否有一部分文本被格式化。c#wpf將RichTextBox格式導出到xml文檔

這裏是我已經有了: 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 
} 

在此先感謝任何人願意幫助!

回答

2

您實際上可以直接訪問XAML內容,這本身顯然是XML。您可以直接保存或操作/將其轉換爲您自己的模式。

要獲得XAML的一個RichTextBox:

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; 
} 

要設置XAML內容一個RichTextBox:

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; 
} 
+0

感謝您的幫助!像魅力一樣工作:D –