VSTO Pluging: Copying format restarts a custom undo record
We are developing a Word add-in using VSTO and have encountered an issue with a custom UndoRecord
. The problem arises when we use the CopyFormat
method between the StartCustomRecord
and EndCustomRecord
method calls. Executing CopyFormat
causes the existing UndoRecord
to close and a new one to start, resulting in an additional record appearing in the undo stack, which is not the desired behaviour.
Here is a simplified version of the method we are using:
csharpCopy code
private static void PasteRtf(string rtf, Range sourceRange, Range targetRange)
{
var undoRecord = sourceRange.Application.UndoRecord;
try
{
undoRecord.StartCustomRecord("Custom record");
targetRange.InsertParagraphBefore();
targetRange = targetRange.Paragraphs.First.Range;
System.Windows.Clipboard.Clear();
System.Windows.Clipboard.SetData(System.Windows.DataFormats.Rtf, rtf);
targetRange.Paste();
sourceRange.Select();
sourceRange.Application.Selection.CopyFormat();
targetRange.Select();
targetRange.Application.Selection.PasteFormat();
}
finally
{
undoRecord.EndCustomRecord();
}
}
In the above code, StartCustomRecord
is called at the beginning, and EndCustomRecord
is called at the end. However, after executing CopyFormat
, it seems that a new UndoRecord
is created, which results in multiple undo actions for a single operation.
Our questions are:
- Why does
CopyFormat
cause a newUndoRecord
to be created? - How can we prevent this behaviour and ensure that only one undo record is created for the entire operation?
Any insights or suggestions would be greatly appreciated. Thanks in advance!