2011-01-15 13 views
4

Kann jemand Licht auf diese für mich werfen, habe ich eine RichTextBox, die eine Xaml-Datei hinein lädt. Ich muss bestimmte Teile des RichTxtBox-Textes durch echte Daten ersetzen, d. H. "[Unser_Name]" wird durch "Billie Brags" ersetzt. Meine XAML-Datei enthält Formatierung wie fett & Schriftgröße.Ersetzen Sie RichTextBox Text, aber behalten Sie die Formatierung

Wenn ich meinen Code ausführen (siehe unten) kann ich den Text ändern, aber die Formatierung verlieren.

Irgendeine Idee, wie ich das tun und die Formatierung behalten kann?

Danke

  FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 
      using (fs) 
      { 
       TextRange RTBText = new TextRange(rtb_wording.Document.ContentStart, rtb_wording.Document.ContentEnd); 
       RTBText.Load(fs, DataFormats.Xaml); 
      } 



     TextRange tr = new TextRange(rtb_wording.Document.ContentStart, rtb_wording.Document.ContentEnd); 
     string rtbContent = tr.Text; 
     rtbContent = rtbContent.Replace("<our_name>", "Billie Brags"); 
     System.Windows.MessageBox.Show(rtbContent); 

     FlowDocument myFlowDoc = new FlowDocument(); 

     // Add paragraphs to the FlowDocument 
     myFlowDoc.Blocks.Add(new Paragraph(new Run(rtbContent))); 
     rtb_wording.Document = myFlowDoc; 

Antwort

5

Seine Arbeiten, das ist, wie ich es am Ende tat, nicht zu hübsch, aber es Funktionen. WPF RTB sollte wirklich RTF-Eigenschaft wie winforms haben ...

Dank Kent für mich auf den richtigen Weg zu bringen.

+4

Sie können auch 'UTF32Encoding.Default.GetString (memoryStream.ToArray()); dies ist besser geeignet für globalisierte Anwendungen –

+0

Warten UTF32Encoding gibt einige Probleme bei Unicode-Text. Sogar UTF8Encoding. Hm.. –

1

Ich glaube, Sie werden den Inhalt des TextRange im RTF-Format speichern müssen und dann den Inhalt des RTB neu zu laden. Ich habe nicht versucht, dies so nicht sicher, ob es funktionieren wird (auf Linux im Moment kann so nicht testen):

var textRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd); 
string rtf; 

using (var memoryStream = new MemoryStream()) 
using (var streamReader = new StreamReader(memoryStream)) 
{ 
    textRange.Save(memoryStream, DataFormats.Rtf); 
    rtf = streamReader.ReadToEnd(); 
} 

rtf = rtf.Replace("<whatever>", "whatever else"); 

using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(rtf))) 
{ 
    textRange.Load(memoryStream, DataFormats.Rtf); 
} 
+0

Verwenden Sie die RichTextBox aus dem Toolkit? Weil das in WPF 4 keine solche Eigenschaft hat ... –

+0

Mein Schlechter - dachte an Winforms RTB. –

+0

Habe jetzt aktualisiert. –

Verwandte Themen