2016-02-19 6 views
1

У меня есть набор предложений. Каждое предложение представляет собой новый объект Run внутри свойства Inlines потока FlowDocument richtextbox. Каждое предложение имеет цвет.Редактирование RichtextBox inline

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

Когда я редактирую предложение, как это (я изменил «да» «y1111111111111es»)

Я ожидал, чтобы получить тот же объект Run с измененным текстом из «да» на «y1111111111111es» но вместо этого я получил 3 объекта Run с «у», «1111111111111111111» и «» ES

That`s как я извлечь Textes

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

есть ли способ, чтобы изменить текст внутри родной Запуск объекта без заполнения новых объектов запуска при изменении текста

ответ

0

Кажется, FlowDocument динамически добавляет пробеги, чтобы поощрить обертывание по дизайну.

Я вижу из другого stackoverflow post, что если вы используете TextBlock вместо прогонов внутри абзацев, вы можете сохранить текст и удалить прогоны и предотвратить обертывание.

Попробуйте это в вашем втором блоке:

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

    } 

Или просто добавить один проход после того, как вы построили строку, если вы не любите TextBlocks:

editedTextes.Add(sb.ToString()); 

 Смежные вопросы

  • Нет связанных вопросов^_^