Почему запись отмены Word не работает с определенными действиями? - PullRequest
0 голосов
/ 19 сентября 2018

Я создал очень простой класс, который должен взаимодействовать с UndoRecord из Microsoft Word в надстройке VSTO.

public class ChangesTracker : IDisposable {
    private Word.UndoRecord undoRecord;

    public ChangesTracker(string name) {
        Globals.ThisAddIn.Application.ScreenUpdating = false;
        undoRecord = Globals.ThisAddIn.Application.UndoRecord;
        undoRecord.StartCustomRecord(name);
    }

    protected virtual void Dispose(bool disposing) {
        if (disposing) {
            if (undoRecord != null) {
                undoRecord.EndCustomRecord( );
                Globals.ThisAddIn.Application.ScreenUpdating = true;
                undoRecord = null;
            }
        }
    }

    public void Dispose() {
        Dispose(true);
    }

    ~ChangesTracker() {
        Dispose(false);
    }
}

Я использую его с простым оператором using для всех операций, которые должны быть сгруппированы

Например:

using (var tracker = new ChangesTracker("Something")) {
    /// code
}

Кажется, это работает большую часть времени, за исключением всего, что получает XML выбора.Например, это ломает это.

var xml = Globals.ThisAddIn.Application.Selection.Range.WordOpenXML;
selectionRoot = new XmlDocument( );
selectionRoot.LoadXml(xml);

При проверке UndoRecord свойство IsRecordingCustomRecord изменяется на false и UndoRecord с этого момента игнорируется.Я делаю что-то неправильно?Возможно, это еще одна ошибка в Word, и если да, то как мне ее обойти?

...