Параметр Cancel события VSTO Word WindowBeforeRightClick игнорируется контекстным меню изображений - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь создать свое собственное контекстное меню, которое показывает, когда Word находится в пользовательском «режиме». Для этого я хочу отключить все контекстные меню по умолчанию в пользу моего. Это прекрасно работает при щелчке правой кнопкой мыши по тексту, но не при щелчке правой кнопкой мыши по изображениям или текстовым полям (кажется, что это объекты в целом). Похоже, что параметр Cancel события игнорируется при щелчке правой кнопкой мыши по изображениям, поэтому он не останавливает показ контекстного меню Word.

Я что-то не так делаю, или это ошибка в Word?

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

Альтернативой моей цели также может быть решение.

Я пытался использовать ribbon.xml, но есть много разных контекстных меню с множеством разных кнопок, галерей и т. Д., Которые мне пришлось бы активно скрывать. Кроме того, мне пришлось бы дублировать много XML, чтобы добавить свои кнопки ко всем этим меню. В этом стремлении я нашел документацию для перечисления этих пунктов контекстного меню, в которой отсутствует полный список, из-за чего мне не хватило кнопки idMso. Кроме того, если бы Microsoft добавила новый элемент, мне пришлось бы выпустить обновление, чтобы активно удалить новый элемент. Весь способ ленты.xml работы с контекстными меню - очень сложный способ добиться того, что должно быть простым запросом (на мой взгляд).

public partial class ThisAddIn
{

    internal bool CustomContextMenuMode = true;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        ThisAddIn.WordApplication.WindowBeforeRightClick += new Word.ApplicationEvents4_WindowBeforeRightClickEventHandler(Application_WindowBeforeRightClick);
    }

    private static void Application_WindowBeforeRightClick(Word.Selection Sel, ref bool Cancel)
    {
        if (CustomContextMenuMode == true)
        {
            MessageBox.Show("Context menu shows here!");
            Cancel = true;
            return;
        }
        Cancel = false;
    }
}

Если щелкнуть правой кнопкой мыши текст (с диапазоном выбора или без него), таблицу или многое другое, вы увидите, что отображается окно сообщения. А в случае отклонения параметр Cancel запрещает показ контекстного меню по умолчанию.

Однако при щелчке правой кнопкой мыши на изображении отображается окно сообщения (как и раньше), но при отклонении все равно отображается контекстное меню изображения Word.

Вот моя версия Word:

Office 365 Business, Версия Word 1903 (сборка 11425.20204) или v16.0.11425.20200

Заранее спасибо!

...