Есть ли способ группировать или временно отключать историю отмены для RichTextBox?

Я сейчас борюсь с таблицами внутри RichTextBoxs в WPF. В WPF в таблицах нет строк и столбцов, у них просто есть строки, каждая из которых имеет определенное количество ячеек. Когда пользователь нажимает кнопку "Добавить столбец", моя программа добавляет новую ячейку в каждую строку.

Проблема с использованием этого метода заключается в том, что после добавления пользователем столбца, если они нажимают кнопку отмены, он удаляет каждую ячейку один за другим, что явно не то, что ожидал пользователь.

Кто-нибудь знает, как временно отключить добавление действий в очередь отмены, или способ группировать действия отмены или любое другое решение моей проблемы?

Ответы

Ответ 1

Если вы хотите группировать действия отмены (а не полностью отменить отмену), вы можете сгруппировать набор программных изменений через TextBoxBase.BeginChange(), затем, после внесения изменений TextBoxBase.EndChange(), то есть:

        richTextBox.BeginChange();
        try
        {
            // Add column

            // For each row, add a cell to the column.
        }
        finally
        {
            richTextBox.EndChange();
        }

Или, что то же самое, вы можете вызвать TextBoxBase.DeclareChangeBlock() внутри using:

        using (richTextBox.DeclareChangeBlock())
        {
            // Add column

            // For each row, add a cell to the column.
        }

Ответ 2

вы можете отключить undo, установив для свойства IsUndoEnabled значение false или вы можете ограничить отмену с помощью UndoLimit. вы можете отключить отмену, установив это свойство на 0, то есть., UndoLimit="0"

<RichTextBox  Name="myRitchTextBox" IsUndoEnabled="False" />