Word: SyncScrollingSideBySide и ScrollIntoView - PullRequest
4 голосов
/ 25 февраля 2011

Одна особенность нашей надстройки Word показывает два окна документа рядом друг с другом.Пользователь может дважды щелкнуть абзац в левом документе, чтобы прокрутить связанный абзац в правом документе для просмотра.Когда мы сделаем это, мы хотим снова включить синхронную прокрутку, если она была включена до двойного щелчка.Мы делаем что-то вроде этого:

private void LineUpParagraphs()
{
    // Unlock the views so we can scroll them independently.
    bool wasSyncEnabled = this.originalDocument.Document.Windows.SyncScrollingSideBySide;
    this.originalDocument.Document.Windows.SyncScrollingSideBySide = false;

    // Scroll corresponding original paragraph into view.
    this.originalDocument.Document.Windows[1].ScrollIntoView(
        this.CurrentOriginalParagraph.Range);

    // Re-enable synchronous scrolling if it was enabled before.
    if (wasSyncEnabled)
    {
        this.originalDocument.Document.Windows.SyncScrollingSideBySide = true;
    }
}

После этого требуемый диапазон отображается в исходном (правый для нашего приложения) документе, но , как только вы прокрутитеокно, правое окно возвращается в исходное положение.

То, что мы пробовали, не работало:

  • Установить свойство SyncScrollingSideBySide для всехокна приложения, а не только один из двух сравниваемых документов.
  • Переключите свойство еще раз.

Мы прибегли к SendKeys для имитации нажатия на кнопку синхронной прокрутки,(Если вы не включите синхронизацию программно, а затем нажмите кнопку самостоятельно, правый документ не вернется в исходное положение при прокрутке).Однако это не совсем приемлемое решение - оно несовместимо, например, в зависимости от того, активна ли вкладка нашей надстройки.Иногда это работает, иногда переключает синхронизацию, прокручивая дополнительное время, которое раздражает клиента.Есть ли лучший способ?

Примечание. Проблема возникает, когда левый документ длиннее правого (прокручиваемый).

...