2017-02-07 3 views
-3

enter image description hereComment convertir un FlowDocument en string?

1) Comment convertir FlowDocument en chaîne?

2) Comment convertir ma chaîne en FlowDocument?

FlowDocument contient du texte et des images.

Le texte de la chaîne doit être conservé. Text12345

Les images doivent être converties. Par exemple, codé: iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABHNCSV

Text12345 
iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABHNCSV 
Text67890 


<text> 
    Text12345 
    <encoded_image> 
     iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABHNCSV 
    </encoded_image> 
    Text67890 
</text> 

XAML:

<RichTextBox x:Name="textrich" > 
    <FlowDocument > 
     <Paragraph/> 
    </FlowDocument> 
</RichTextBox> 
+0

Pourquoi n'énumérez-vous pas _YourRichTextBox.Document.Blocks_? S'il s'agit d'un TextRun, récupérez la chaîne, si c'est quelque chose d'autre, convertissez-la en une chaîne. – Ron

+0

Comment? ........... – codename0082016

+0

Pour montrer comment, je pense que vous devriez être plus précis. Que voulez-vous dire par "Les images doivent être converties"? voulez-vous de l'aide là-dessus aussi? – Ron

Répondre

1

La manière habituelle pour obtenir le texte d'une RichTextBox est à l'aide d'un TextRange:

string rtb = new TextRange(rtb .Document.ContentStart, rtb .Document.ContentEnd).Text; 

En Dans votre cas, vous voulez traiter différents blocs et Inlines, différemment. Vous pouvez les énumérer. Quelque chose comme ceci:

var res = new StringBuilder(); 
foreach (Block r in rtb.Document.Blocks) 
    { 
     if (r is Paragraph) 
      foreach (Inline i in ((Paragraph)r).Inlines) 
       if (i is Run) 
       { 
        res.Append(r.ToString()); 
       } 
       else if (i is InlineUIContainer) 
       { 
        res.Append(ConvertToString((Image)((InlineUIContainer)i).Child)); // you should create ConvertToString() method 
       } 

    }