Я создал очень простой класс, который должен взаимодействовать с 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, и если да, то как мне ее обойти?