C # Outlook Mailitem ContextMenu и лента не работают вместе (только по отдельности) - PullRequest
2 голосов
/ 28 июня 2019

Мне нужно создать надстройку Outlook, в которой лента будет работать на панели инструментов и в ContextMenu (щелкните правой кнопкой мыши на mailitem).

Вначале я делал эти две вещи отдельно в отдельных проектах.

В 1 проекте я добавляю Ленту (визуальный дизайн).После запуска все работает очень хорошо.

В проекте 2 я хочу сделать contextmenu для почты.В класс ThisAddIn.cs добавляет:

protected override IRibbonExtensibility CreateRibbonExtensibilityObject()
        {
            return new OutlookAddInExtensibility();
        }

И я добавляю класс OutlookAddInExtensibility.cs:

[ComVisible(true)]
    public class OutlookAddInExtensibility : IRibbonExtensibility
    {
        public string GetCustomUI(string RibbonID)
        {
            return
                @"<?xml version=""1.0"" encoding=""UTF-8""?>
                    <customUI xmlns=""http://schemas.microsoft.com/office/2009/07/customui"">
                        <contextMenus>    
                            <contextMenu idMso=""ContextMenuMailItem"">
                                <button 
                                    id=""MyContextMenuMailItem""
                                    label=""My new button label""
                                    onAction=""RibbonMenuClick""
                                />
                            </contextMenu>  
                        </contextMenus>
                    </customUI>
                ";
        }

        public void RibbonMenuClick(IRibbonControl control)
        {
            MessageBox.Show("Show text");
        }

После запуска он работает очень хорошо.

К сожалению, когдаЯ добавляю эти две вещи в один проект - работает только ContectMenu.Лента сверху не отображается.

Кто-нибудь знает решение этой проблемы?

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Благодаря помощи @Eugene Astafiev я нашел решение. Экспорт RibbonVisualDesigner в XML. И добавление кода из ContextMenu в XML. Два в одном:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab id="testTab" label="Test Label">
        <group id="testGroup" label="test">
          <button id="testButton" onAction="testAction" label="Test" size="large"
              getImage ="GetCustomImage" screentip="Test Ribbon Functionality."/>
        </group>
      </tab>
    </tabs>
  </ribbon>
  <contextMenus>
    <contextMenu idMso="ContextMenuMailItem">
      <button idMso="FontDialog" visible="false" />
      <toggleButton id="MyToggle" label="My Toggle Button" />
      <button id="MyButton" label="My Button" insertBeforeMso="HyperlinkInsert" onAction="GetButtonID" />
      <menuSeparator id="MySeparator" />
      <menu id="MySubMenu" label="My Submenu" >
        <button id="MyButton2" label="Button on submenu" />
      </menu>
      <gallery id="galleryOne" label="My Gallery">
        <item id="item1" imageMso="HappyFace" />
        <item id="item2" imageMso="HappyFace" />
        <item id="item3" imageMso="HappyFace" />
        <item id="item4" imageMso="HappyFace" />
      </gallery>
      <dynamicMenu id="MyDynamicMenu" label= "My Dynamic Menu" getContent="GetMyContent" />
    </contextMenu>
  </contextMenus>
</customUI>
0 голосов
/ 28 июня 2019

Вам нужно выбрать один способ настройки пользовательского интерфейса - экспортировать пользовательский интерфейс ленты, разработанный в Visual Studio, в XML-файл ленты, а затем объединить их вместе.Не забудьте вернуть соответствующую разметку в зависимости от параметра RibbonID, переданного методу GetCustomUI.

Существует два способа создания пользовательского интерфейса в приложениях Office (в VSTO):

  1. Пошаговое руководство. Создание настраиваемой вкладки с помощью конструктора лент
  2. Пошаговое руководство. Создание настраиваемой вкладки с использованием ленты XML

В связи с тем, что дизайнер ленты VSTO не предоставляет и не поддерживает все функции ленты, вам необходимо экспортировать существующий пользовательский интерфейс в XML и продолжить работу с ним.

См. Как выполнить: Экспортлента от дизайнера ленты до ленты XML для получения дополнительной информации.

...