2010-04-29 4 views
1

В нашем VSTO Word 2010 Addin мы пытаемся вставить RichTextControl после заданного другого ContentControl. Мы попытались это:Вставка ContentControl после другого ContentControl

public ContentControl AddContentControl(WdContentControlType type, int position) 
    { 
     Paragraph paragraphBefore = null; 
     if (position == 0) 
     { 
      if (WordDocument.Paragraphs.Count == 0) 
      { 
       WordDocument.Paragraphs.Add(); 
      } 
      paragraphBefore = WordDocument.Paragraphs.First; 
     } 
     else 
     { 
      paragraphBefore = Controls.ElementAt(position - 1).Range.Paragraphs.Last; 
     } 

     object start = paragraphBefore.Range.End; 
     object end = paragraphBefore.Range.End + 1; 

     paragraphBefore.Range.InsertParagraphAfter(); 

     Range rangeToUse = WordDocument.Range(ref start, ref end); 

     ContentControl newControl = _ContentControl = _WordDocument.ContentControls.Add(type, rangeToInsert); 

     Controls.Insert(position, newControl); 

     OnNewContentControl(newControl, position); 

     return newControl.ContentControl; 
    } 

, который прекрасно работает, если элемент управления, который находится перед той, которую мы хотим вставить не имеет пустой абзац в конце. Если это так, новый ContentControl вставлен в последний элемент управления.

Как мы можем избежать этого?

ответ

5

Немного поздно для ответа, но это то, что я сделал, чтобы справиться с этим делом:

Я думаю, что это в основном то, что вы сделали, но я вставить абзац, а затем перейти к блоком Абзац. Кажется, работает в моем случае.

Globals.ThisDocument.Paragraphs.First.Range.Select(); 

var cc = Globals.ThisDocument.Controls.AddRichTextContentControl(Guid.NewGuid().ToString()); 

var newRange = cc.Range; 
object count = 1; 
newRange.Move(Unit: Word.WdUnits.wdParagraph, Count: ref count); 

Globals.ThisDocument.Paragraphs.Add(); 
newRange.Move(Unit: Word.WdUnits.wdParagraph, Count: ref count); 

var cc2 = Globals.ThisDocument.Controls.AddRichTextContentControl(newRange, Guid.NewGuid().ToString()); 
Смежные вопросы