Надстройка Outlook и отключение / скрытие пунктов пользовательского меню - PullRequest
5 голосов
/ 17 сентября 2011

Я создал надстройку Outlook и использую файл конфигурации ленты XML, чтобы указать новую вкладку и кнопку. Кнопка загружается в новую вкладку в Outlook. Теперь иногда, основываясь на пользователе, мы хотим иметь возможность скрыть или отключить эти кнопки. Какой самый простой способ отключить кнопку меню на пользовательской вкладке через интерфейс Outlook Interop?

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

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
    this.ribbon = new MyRibbon();

    // loop through tabs and ribbon items, look for my custom control, and enabled/disable specific buttons.

    return this.ribbon;
}

1 Ответ

6 голосов
/ 17 сентября 2011

Извините, что отвечаю на мой вопрос.Наконец-то разобрался.В конфигурации xml есть обратный вызов getVisible для кнопок / групп / вкладок.

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

<ribbon>
    <tabs>
      <tab idQ="myNs:myTab" label="My Label" >
          <group id="settingsGroup" label="Settings" getVisible="Control_Visible" >
              <button id="preferences" label="Preferences" image="configuration.png"
      screentip="Preferences" size="large" onAction="Settings_Click" supertip="Preferences" />
          </group>
      </tab>
    </tabs>
</ribbon>

и создайте метод обратного вызова

public bool Control_Visible(Office.IRibbonControl control)
{
    // In order to maintain a reference to the groups, I store the controls into a List<Office.IRibbonControl>.
    if(!this.groupControls.Contains(control))
    {
        this.groupControls.Add(control);
    }         

    // logic here to determine if it should return true or false to be visible...
    return true;
}

Затем, если во время использования outlook вы измените настройку видимости кнопки / вкладки / группы, вам необходимо вызвать метод Invalidate () длялента, поэтому лента перерисовывается.IE:

this.ribbon.Invalidate();
...