代码之家  ›  专栏  ›  技术社区  ›  cas4

Outlook上下文菜单,已选择多个日历事件

  •  0
  • cas4  · 技术社区  · 7 年前

    我正在VS2017中编写outlook加载项。当选择一个或多个日历事件时,我需要一个上下文菜单。使用以下XML选择单个日历事件时,我可以获得上下文菜单:

    <customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2009/07/customui" loadImage="GetImage">
      <contextMenus>    
        <contextMenu idMso="ContextMenuCalendarItem">
            <button id="MyContextMenuCalendarItem"
                label="Copy To Google Calendar"
                image="Google_Calendar_Logo.png"
                onAction="CopyToGoogleCalendar_Click"/>
        </contextMenu>  
        </contextMenus>     
    </customUI>
    

    如果我使用idMso“ContextMenuMultipleItems”,当选择任何类型的多个(电子邮件、日历等)时,将显示上下文菜单。在选择了多个日历事件的情况下,我无法找出上下文菜单的正确idMso。

    任何帮助都将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  0
  •   cas4    7 年前

    事实证明,使用“ContextMenuMultipleItems”idMso可以与添加的“getVisible”方法一起工作。我的XML现在看起来像:

    <?xml version="1.0" encoding="utf-8"?>
    <customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2009/07/customui" loadImage="GetImage">
      <contextMenus>    
        <contextMenu idMso="ContextMenuCalendarItem">
            <button id="MyContextMenuCalendarItem"
                label="Copy To Google Calendar"
                            image="Google_Calendar_Logo.png"
                onAction="CopyToGoogleCalendar_Click"/>
        </contextMenu>  
        <contextMenu idMso="ContextMenuMultipleItems">
            <button id="MyContextMenuMultipleItems" 
                label="Copy To Google Calendar" 
                            image="Google_Calendar_Logo.png"
                            getVisible="ContextMenuMultipleItems_IsVisible"
                onAction="CopyToGoogleCalendar_Click"/>
        </contextMenu>   
        </contextMenus>     
    </customUI>
    

    ContextMenuMultipleItems\u IsVisible如下所示:

    public bool ContextMenuMultipleItems_IsVisible(Office.IRibbonControl control)
    {
        if (control.Context is Outlook.Selection)
        {
            Outlook.Selection selection = control.Context as Outlook.Selection;
            if (selection[1] is Outlook.AppointmentItem)
                return true;
        }
        return false;
    }