Как отключить вкладку «Сохранить как» в Word 2016 - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть надстройка VSTO, которую я разработал для Word 2010, и в настоящее время я нахожусь в процессе обновления до Office 2016. Одна из вещей, которые я делаю, в ленте xml отключает команду сохранения как ((< команда idMso = "FileSaveAs" getEnabled = "IsFileSaveAsEnabled" ...>) с определенными документами. Тем не менее, похоже, что Microsoft добавила новую вкладку «Сохранить как» в представление Backstage в Word 2016, которое я не могу динамически отключить.

Отключение команды «Сохранить как» влияет на кнопку «Сохранить как», если она добавлена ​​на панель быстрого доступа, но не влияет на вкладку в режиме просмотра задней части. Я попытался изменить другие элементы на этой вкладке, и она, кажется, игнорирует любые изменения, которые я пытаюсь внести.

Я занимаюсь разработкой в ​​VS 2017 и автоматически перенес проект в Office 2016.

Если я добавлю

<backstage>
    ...
    <tab idMso="TabSave" getEnabled="IsFileSaveEnabled" />
    ...
</backstage>

в мой ribbon.xml IsFileSaveEnabled не вызывается.

public bool IsFileSaveEnabled(IRibbonControl control) 
{
    return false; // Not the actual implementation, but you get the idea.
}

На самом деле даже установка атрибута enabled в false ничего не делает, однако это

<backstage>
    ...
    <tab idMso="TabSave" visible="false" />
    ...
</backstage>

действительно скрывает вкладку. Хотя это бесполезно, потому что это произойдет для всех документов, но я хочу, чтобы это было условно.

Так нельзя ли отключить эту вкладку так, как я хочу, или мне нужно что-то новое? Я не могу найти что-либо еще в Интернете по этому поводу.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Я собираюсь ответить на свой вопрос здесь, когда я подумал об обходном пути. Вместо того, чтобы пытаться взаимодействовать со встроенной вкладкой «Сохранить как», я просто собираюсь навсегда скрыть ее и добавить собственную копию этой вкладки, которую я создаю с нуля, чтобы она выглядела и вела себя точно так же, как встроенная вкладка. Немного больше работы, но не могу придумать другого способа сделать это.

0 голосов
/ 12 июля 2019

У меня нет Word 2016, поэтому я не могу проверить это, но вы, вероятно, могли бы перехватить событие сохранения и прервать его, когда оно будет сохранено.

// this is for a document-level add-in; do this in your startup method
BeforeSave += new SaveEventHandler(ThisDocument_BeforeSave);

private void ThisDocument_BeforeSave(object sender, SaveEventArgs e)
{
    e.Cancel = e.ShowSaveAsDialog;
    return;
}

Я делаю что-то похожее в моем дополнениии работает хорошо.

0 голосов
/ 12 апреля 2019

Если видимость должна быть условной, то настройка должна быть динамической. Это означает, что требуется обратный вызов , а не статическая настройка:

<tab idMso="TabSave" getVisible="procedureName" />

Эта процедура должна быть в Ribbon1.cs (или как бы этот класс не вызывался в вашем проекте VSTO) и логике для того, чтобы сделать элемент управления видимым (или нет) - так же, как IsFileSaveEnabled. Обратный вызов сработает, когда лента загружается в первый раз, и каждый раз, когда элемент управления (или вся лента) становится недействительным (Ribbon.Invalidate / InvalidateControl(controlID)). Обычно это делается в таких событиях, как DocumentOpen, DocumentClose, DocumentChange и т. Д.

Я предполагаю, что у вас уже есть процедуры для инициализации объекта Ribbon в вашем коде (GetCustomUI и Ribbon_Load).

Вот простой пример, который я имею в тестовом проекте, который переключает видимость группы:

    private Office.IRibbonUI ribbon; //initialized via Ribbon's load event
    bool bGetVisible = false;

    //triggered by clicking a Ribbon control
    public void ShowFontGroup_Click(Office.IRibbonControl ctl)
    {
        bGetVisible = true;
        ribbon.Invalidate(); //triggers all "get" callbacks in the Ribbon
    }

    //callback triggered by invalidating the Ribbon
    public bool GroupFont_GetVisible(Office.IRibbonControl ctl)
    {
        return bGetVisible;
    }
...