Вставка ContentControl после другого ContentControl - PullRequest
1 голос
/ 29 апреля 2010

В нашем дополнении VSTO Word 2010 мы пытаемся вставить RichTextControl после данного другого 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 вставляется в последний элемент управления.

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

1 Ответ

5 голосов
/ 08 сентября 2012

Немного опоздал на ответ, но вот что я сделал для этого случая:

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

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...