Copying format restarts a custom undo record
I'm developing a Word add-in using VSTO and faced an issue with a custom UndoRecord
. The problem appears when I use the CopyFormat method between the StartCustomRecord
and EndCustomRecord
method calls. Executing CopyFormat
causes the existing UndoRecord to close and start a new one. This results in an additional record appearing in the undo stack, which is not the desired behaviour.
Here is a simplified version of the method I'm using:
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.
My questions are:
- Why does
CopyFormat
cause a newUndoRecord
to be created? - How can I prevent this behavior and ensure that only one undo record is created for the entire operation?
Any insights or suggestions would be greatly appreciated. Thanks in advance!