2016-02-19 2 views
1

J'ai un tableau de phrases. Chaque phrase est un nouvel objet Run dans la propriété Inlines du FlowDocument de richtextbox. Chaque phrase a une couleur.RichtextBox édition en ligne

 var paragraph = new Paragraph(); 
     foreach (var sentence in Sentences) 
     { 
      .... 
      paragraph.Inlines.Add(new Run { Text = sentence, Background = new SolidColorBrush(color) }); 
     } 
     tbText.Document.Blocks.Add(paragraph); 

Quand je suis l'édition de la phrase comme ça (j'ai changé « oui » à « y1111111111111es »)

Je me attendais à obtenir le même objet Exécuter avec le texte modifié de « oui » à « y1111111111111es », mais à la place, je suis 3 objets Run avec « y », « 1111111111111111111 » et 'es de

That`s comment je récupère les textes

 foreach (Paragraph paragraph in tbText.Document.Blocks) 
     { 
      foreach (Run inline in paragraph.Inlines) 
      { 
       editedTextes.Add(inline.Text); 
      } 
     } 

Est-il possible de modifier le texte à l'intérieur natif Exécuter un objet sans remplir de nouveaux objets Run lorsque je change le texte

Répondre

0

Il semble que FlowDocument ajoute dynamiquement des passages pour encourager l'emballage.

Je vois d'un autre stackoverflow post, que si vous utilisez un TextBlock au lieu de s'exécuter à l'intérieur de Paragraphes, vous pouvez conserver votre texte et supprimer les exécutions et empêcher l'encapsulation.

Essayez dans votre deuxième bloc:

foreach (Paragraph paragraph in tbText.Document.Blocks) 
    { 
     var sb = new StringBuilder(); 
     foreach (Run inline in paragraph.Inlines) 
     { 
      sb.Append(inline.Text); 
     } 

     editedTextes.Add(new TextBlock() 
     { 
      Text = sb.ToString(), 
      TextWrapping = TextWrapping.NoWrap 
     }); 

    } 

Ou tout simplement ajouter une course après avoir construit la chaîne si vous ne l'aimez pas les TextBlocks:

editedTextes.Add(sb.ToString());