2017-02-13 4 views
0

Quelqu'un peut-il s'il vous plaît m'aider à comprendre RTF? J'ai un inputStream rempli d'une chaîneCréer RTF exécuter dans flowdocument

inputStream = new MemoryStream(Encoding.ASCII.GetBytes((myObject.someStr))); 

Ensuite, ce flux est passé à FlowDocument

FlowDocument fldoc = new FlowDocument(); 
TextRange tr = new TextRange(
    fldoc.ContentStart, fldoc.ContentEnd); 
tr.Load(inputStream, DataFormats.Rtf); 

Après que je crée textbox personnalisé pour gérer la propriété de myObject

Block curBlock = fldoc.Blocks.FirstBlock; 
Inline curInline = (currentBlock as Paragraph).Inlines.FirstInline; 
Run curRun = (currentInline as Span).Inlines.FirstInline as Run; 
return new CustomTextBox(tr, currentRun.ContentStart, myObject) 

À perdre de vue ma zone de texte personnalisée fait

TextPointer ptr = CurrentRun.ContentStart; 
ptr.DeleteTextInRun(ptr.GetTextRunLength(LogicalDirection.Forward)); 
ptr.InsertTextInRun(mainTextbox.Text); 
using (MemoryStream ms = new MemoryStream()) 
{ 
    tr.Save(ms, DataFormats.Rtf); 
    myObject.someStr = ASCIIEncoding.Default.GetString(ms.ToArray()); 
} 

Maintenant le problème: si myObject.someStr == "", alors curBlock == null, et je ne peux pas instancier CustomTextBox. J'essaie de

Paragraph p = new Paragraph(); 
Span s = new Span(); 
Run r = new Run(tr.Text); 
s.Inlines.Add(r); 
p.Inlines.Add(s); 
fldoc.Blocks.Add(new Paragraph()); 
return new CustomTextBox(tr, r.ContentStart, myObject) 

, mais tr est vide de toute façon. Comment puis-je gérer cela?

Répondre

0
fldoc = new FlowDocument(p); 

aide