Share via


在 Outlook 2010 中扩展用户界面

**摘要:**了解如何以编程方式扩展 Microsoft Office Fluent 用户界面 (UI) 以自定义 Microsoft Outlook 2010 中的 UI。Microsoft Office 2010 中的 Fluent UI 包括 Office Fluent 功能区、菜单和 Microsoft Office Backstage 视图。本文讨论如何自定义 Outlook 2010 UI 中的浏览器和检查器功能区、菜单和上下文菜单以及 Backstage 视图。本文演练了一个代码示例来说明如何自定义功能区、上下文菜单和 Backstage 视图,并检查适用于 Outlook 2010 UI 的特定问题。

上次修改时间: 2013年1月30日

适用范围: Office 2010 | Outlook 2010 | Visual Studio

本文内容
概述
示例加载项
功能区标识符
浏览器
检查器
文件夹上下文菜单
根搜索文件夹上下文菜单
存储上下文菜单
邮件项目的上下文菜单
多个选定项目的上下文菜单
约会或会议请求的上下文菜单
任务项目的上下文菜单
联系人项目的上下文菜单
日记项目的上下文菜单
便笺项目的上下文菜单
快捷方式上下文菜单
附件上下文菜单
表视图上下文菜单
日历视图上下文菜单
卡视图上下文菜单
时间线视图上下文菜单
"排列方式"命令的菜单
时间条的上下文菜单
"忙/闲"条的上下文菜单
表视图列的上下文菜单
类别上下文菜单
快速标记的上下文菜单
已标记的邮件项的上下文菜单
已标记的联系人项的上下文菜单
邮件模块的"新项目"菜单
日历模块的"新项目"菜单
联系人模块的"新项目"菜单
任务模块的"新项目"菜单
日记模块的"新项目"菜单
便笺模块的"新项目"菜单
发件人或收件人的个人上下文菜单
可选交互的菜单
上下文选项卡
Backstage 视图
结论
其他资源

目录

-
概述

-
示例加载项

-
功能区标识符

-
浏览器

-
检查器

-
文件夹上下文菜单

-
根搜索文件夹上下文菜单

-
存储上下文菜单

-
邮件项目的上下文菜单

-
多个选定项目的上下文菜单

-
约会或会议请求的上下文菜单

-
任务项目的上下文菜单

-
联系人项目的上下文菜单

-
日记项目的上下文菜单

-
便笺项目的上下文菜单

-
快捷方式上下文菜单

-
附件上下文菜单

-
表视图上下文菜单

-
日历视图上下文菜单

-
卡视图上下文菜单

-
时间线视图上下文菜单

-
"排列方式"命令的菜单

-
时间条的上下文菜单

-
"忙/闲"条的上下文菜单

-
表视图列的上下文菜单

-
类别上下文菜单

-
快速标记的上下文菜单

-
已标记的邮件项的上下文菜单

-
已标记的联系人项的上下文菜单

-
邮件模块的"新项目"菜单

-
日历模块的"新项目"菜单

-
联系人模块的"新项目"菜单

-
任务模块的"新项目"菜单

-
日记模块的"新项目"菜单

-
便笺模块的"新项目"菜单

-
发件人或收件人的个人上下文菜单

-
可选交互的菜单

-
上下文选项卡

-
Backstage 视图

-
结论

-
其他资源

概述

本文介绍了许多可以编程方式自定义 Outlook 2010 UI 中的以下区域的新方法:

  • 浏览器功能区

  • 检查器功能区

  • 上下文菜单

  • 新项目菜单

  • 联系人卡片上下文菜单

  • 上下文选项卡

  • Backstage 视图

具体来说,本文说明如何使用 Fluent UI 扩展性 来自定义其中每个区域中的组件。首先,必须为 IRibbonExtensibility(该链接可能指向英文页面) 接口的 GetCustomUI(该链接可能指向英文页面) 方法提供 XML 标记。使用要自定义的组件的功能区 ID 来确定要作为 GetCustomUI 方法中的返回值传递的 XML。XML 通常提供可用于对按钮单击或控制功能区控件的可见性进行响应的回调。

本文列出了您应在代码中的 Fluent UI 扩展性回调中预期的 IRibbonControl.Context(该链接可能指向英文页面) 属性。另外,本文还包括每个 UI 组件的示例 XML 标记和说明 UI 组件的屏幕快照,以帮助您了解在 Outlook 2010 UI 中的哪些位置进行了自定义。

备注

本文中的功能区 ID 和组件在 Outlook 2010 的最终发行版本中可能会发生更改。在某些情况下,菜单或上下文菜单上的确切菜单项取决于所安装的 Microsoft Office 2010 套件和所选 Outlook 项目的类型。

在阅读本文之前,您应该已基本了解如何使用加载项扩展 Fluent UI。如果您不熟悉 Fluent UI 扩展性,请参阅其他资源一节中列出的技术文章。

示例加载项

本文附带了名为 RibbonXOutlook14AddinCS 的示例加载项。它使用 Microsoft Visual C# 并需要 Microsoft Visual Studio 2008 Service Pack 1 和 Outlook 2010。

概述

此示例加载项演示如何自定义 Outlook 2010 中的功能区、菜单、上下文菜单和 Backstage 视图。在 Visual Studio 2008 Tools for Office 中开发的此加载项添加功能区控件、自定义菜单、上下文菜单项和 Backstage 视图控件,然后在用户单击控件或菜单项时显示消息框。此加载项为 Outlook 2010 UI 中可使用 Fluent UI 扩展性进行自定义的每个入口点提供视觉元素。

此示例加载项具有一些说明如何管理 Outlook 2010 UI 中的某些问题区域的其他功能。例如,假定您希望仅为收到的电子邮件项目在功能区中显示自定义组。此示例加载项将只在 Outlook 浏览器中的所选项目是收到的邮件项目时或收到的邮件项目显示在检查器中时才显示自定义功能区选项卡。虽然这可能起初看上去是微不足道的任务,但实际上这是一个复杂的问题,因为 Outlook 可以显示多个浏览器或检查器窗口,所以您的代码必须能够做出相应响应。例如,在两个打开的浏览器窗口中,您可能必须在选择了会议的窗口中隐藏自定义选项卡,而在选择了收到的邮件项目的窗口中显示自定义选项卡。在明白了此示例加载项的工作原理之后,您可以使用此示例中的包装类来构建自己的解决方案,从而协调您的命令 UI 在多个 Outlook 窗口中的显示。

安装说明

下载示例代码安装程序包

  1. MSDN 代码库(该链接可能指向英文页面)网站下载 RibbonXOutlook14AddinCS.zip 文件。

  2. 将 .zip 文件解压缩到您选择的文件夹中。在 Windows Vista 中,Visual Studio 2008 Tools for Office 项目的默认路径为 C:\Users\user\Documents\Visual Studio 2008\Projects。

运行 Outlook 功能区扩展性示例

  1. 关闭 Outlook 2010。

  2. 在您将 RibbonXOutlook14AddinCS.zip 文件解压缩到的文件夹中,打开"RibbonXOutlook14AddinCS"解决方案。

  3. 在"生成"菜单上,单击"生成 RibbonXOutlook14AddinCS"。

  4. 启动 Outlook 2010 来以运行模式启动加载项,或按 F5 来以调试模式启动加载项。如果 Outlook 没有以调试模式启动,请完成以下过程。

以调试模式启动 Outlook

  1. 在"解决方案资源管理器"中,选择"RibbonXOutlook14AddinCS"。

  2. 在"项目"菜单上,选择"RibbonXOutlook14AddinCS 属性",然后单击"调试"选项卡。

  3. 在"启动操作"下,选择"启动外部程序"选项,然后单击"浏览"。

  4. 在 [驱动器:]\Program Files\Microsoft Office\Office14 文件夹中,选择"Outlook.exe"。

  5. 按 F5 以调试模式启动加载项。

代码演练

"Outlook14RibbonXAddinCS"解决方案是使用 Microsoft Visual Studio 2008 Service Pack 1 生成的。它使用 XML 标记文件的手动创作,而非 Visual Studio Tools for Office 提供的功能区设计器。最重要的结构功能是使用包装类(用于浏览器的 OutlookExplorer.cs 和用于检查器的 OutlookInspector.cs)来处理多个 Outlook 窗口。使用 C# 泛型 List(T) 类实现包装类。

备注

如果您没有编写托管代码,则必须编写模仿使用这些包装类的本机 C++ 代码。

首先,在 带 Visual Studio Tools for Office 的 Visual Studio 2008 中的标准 ThisAddin 类中声明以下类级实例变量。

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;

namespace RibbonXOutlook14AddinCS
{
    public partial class ThisAddIn
    {
        #region Instance Variables
        Outlook.Application m_Application;             
        Outlook.Explorers m_Explorers;
        Outlook.Inspectors m_Inspectors;
        public stdole.IPictureDisp m_pictdisp = null;
        // List of tracked explorer windows.         
        internal static List<OutlookExplorer> m_Windows;
        // List of traced inspector windows.
        internal static List<OutlookInspector> m_InspectorWindows;
        // Ribbon UI reference.
        internal static Office.IRibbonUI m_Ribbon;
        #endregion
        ...
    }
}

在声明实例变量之后,将在提供给所有 带 Visual Studio Tools for Office 的 Visual Studio 2008 加载项的 ThisAddin 类的 Startup 方法中使用它们。在 Startup 方法(通常在 Outlook 启动时执行)中,代码首先与事件处理程序挂钩来响应 Outlook Explorers(该链接可能指向英文页面) 集合对象上的 NewExplorer(该链接可能指向英文页面) 事件。在处理了 NewExplorer 事件之后,将使用以下代码添加活动浏览器窗口。

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    // Initialize variables.
    m_Application = this.Application;
    m_Explorers = m_Application.Explorers;
    m_Inspectors = m_Application.Inspectors;
    m_Windows = new List<OutlookExplorer>();
    m_InspectorWindows = new List<OutlookInspector>();

    // Wire up event handlers to handle multiple Explorer windows.
    m_Explorers.NewExplorer += 
        new Outlook.ExplorersEvents_NewExplorerEventHandler(
            m_Explorers_NewExplorer);
    // Wire up event handler to handle multiple Inspector windows.
    m_Inspectors.NewInspector += 
        new Outlook.InspectorsEvents_NewInspectorEventHandler(
            m_Inspectors_NewInspector);
    // Add the ActiveExplorer to m_Windows.
    Outlook.Explorer expl = m_Application.ActiveExplorer()
        as Outlook.Explorer;
    OutlookExplorer window = new OutlookExplorer(expl);
    m_Windows.Add(window);
    // Hook up event handlers for window.
    window.Close += new EventHandler(WrappedWindow_Close);
    window.InvalidateControl += new EventHandler<
        OutlookExplorer.InvalidateEventArgs>(
        WrappedWindow_InvalidateControl);
    // Get IPictureDisp for CurrentUser on startup.
    try
    {
        Outlook.AddressEntry addrEntry = 
            Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry;
        if (addrEntry.Type == "EX")
        {
            Outlook.ExchangeUser exchUser = 
                addrEntry.GetExchangeUser() as Outlook.ExchangeUser;
            m_pictdisp = exchUser.GetPicture() as stdole.IPictureDisp;
        }
    }
    catch (Exception ex)
    {
        // Write exception to debug window.
        Debug.WriteLine(ex.Message);
    }
}

在 Outlook 刚启动后,Office 调用 GetCustomUI。GetCustomUI 是 IRibbonExtensibility 接口用于加载自定义 XML 标记的方法。在 Outlook 2007 中,Office 在给定检查器类型(例如联系人或约会)的第一个实例显示时调用 GetCustomUI。在 Outlook 2010 中,Office 在调用 ThisAddin.Startup 方法之前调用 GetCustomUI 来为 Outlook 浏览器功能区提供功能区自定义项的加载。因为 Office 只在启动期间为第一个 Outlook 浏览器调用一次 GetCustomUI,而为多种检查器类型的第一个实例调用多次,所以请考虑使用 Switch 语句来控制不同自定义功能区的 XML 标记的加载。对于 Outlook 中的每个功能区,将调用 GetCustomUI,并且 Office 将传递标识要在 Outlook 中加载的功能区的功能区 ID 字符串。有关功能区 ID 的完整列表,请参阅功能区标识符一节。

在示例代码中,有三个 XML 标记文件:

  • ContactCard.xml

  • Explorer.xml

  • ReadMail.xml

ContactCard.xml 包含联系人卡片上的上下文菜单的 XML 标记。Explorer.xml 包含浏览器功能区、联系人菜单和 Backstage 视图的 XML 标记。Readmail.xml 包含已读邮件检查器的 XML 标记。

若要更好地了解此技术的工作原理,请查看 OutlookRibbonX 类中的 GetCustomUI 方法中的以下代码。

        
public string GetCustomUI(string ribbonID)
{
    string customUI = string.Empty;
    Debug.WriteLine(ribbonID);
    // Return the appropriate XML markup for ribbonID.
    switch (ribbonID)
    {
        case "Microsoft.Outlook.Explorer":
            customUI = GetResourceText( 
                "RibbonXOutlook14AddinCS.Explorer.xml");
            return customUI;
        case "Microsoft.Outlook.Mail.Read":
            customUI= GetResourceText(
                "RibbonXOutlook14AddinCS.ReadMail.xml");
            return customUI;
        case "Microsoft.Mso.IMLayerUI":
            customUI = GetResourceText(
                "RibbonXOutlook14AddinCS.ContactCard.xml");
            return customUI;
        default:
            return string.Empty;
    }
}

有关 ContactCard.xml、Explorer.xml 和 ReadMail.xml 的完整列表,请查看示例解决方案。在为每个加载项加载了自定义 XML 标记之后,应在 Fluent UI 扩展性回调中编写代码来隐藏和显示名为"MyTab"的选项卡,具体取决于浏览器中的所选项目是否是收到的邮件项目。若要完成此方案,您必须与 OutlookExplorer 类的构造函数中的另一组事件挂钩。

        
public OutlookExplorer(Outlook.Explorer explorer)
{
    m_Window = explorer;
        
    // Hook up Close event.
    ((Outlook.ExplorerEvents_Event)explorer).Close +=
        new Outlook.ExplorerEvents_CloseEventHandler(
        OutlookExplorerWindow_Close);

    // Hook up SelectionChange event.
    m_Window.SelectionChange += 
        new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(
        m_Window_SelectionChange);
}

SelectionChange 事件处理程序非常简单。每当用户在浏览器窗口中更改所选内容时,都会出现 SelectionChange 事件。当出现 SelectionChange 时,会调用 RaiseInvalidateControl 方法并将控件 ID"MyTab"传递给该方法。RaiseInvalidateControl 调用 ThisAddin 类中名为 WrappedWindow_InvalidateControl 的事件委托。

        
private void m_Window_SelectionChange()
{
    RaiseInvalidateControl("MyTab");
} 
void WrappedWindow_InvalidateControl(object sender,
    OutlookExplorer.InvalidateEventArgs e)
{
    if (m_Ribbon != null)
    {
        m_Ribbon.InvalidateControl(e.ControlID);
    }
}

m_Ribbon 变量表示 IRibbonUI 对象。当调用 IRibbonUI 对象的 InvalidateControl 方法时,会为"MyTab"控件执行功能区回调。也可以调用 IRibbonUI 的 Invalidate 方法,但该方法会引发对将加载项添加到功能区中的所有控件执行回调。一般来说,您在禁用某些项时应尽量细化而不是全局禁用,尤其当您的回调功能使用 getImage 回调加载图像资源时。对"MyTab"控件而言,已经在 RibbonXAddin 类中定义了控制选项卡可见性的 getVisible 回调。如果 getVisible 回调返回 True,则选项卡可见;否则,隐藏"MyTab"。下面的代码是完整的 MyTab_GetVisible 回调。

        
// Only show MyTab when explorer selection is 
// a received mail or when inspector is a read note.
public bool MyTab_GetVisible(Office.IRibbonControl control)
{
    if (control.Context is Outlook.Explorer)
    {
        Outlook.Explorer explorer = 
            control.Context as Outlook.Explorer;
        Outlook.Selection selection = explorer.Selection;
        if (selection.Count == 1)
        {
            if (selection[1] is Outlook.MailItem)
            {
                Outlook.MailItem oMail = 
                    selection[1] as Outlook.MailItem;
                if (oMail.Sent == true)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    else if (control.Context is Outlook.Inspector)
    {
        Outlook.Inspector oInsp = 
            control.Context as Outlook.Inspector;
        if (oInsp.CurrentItem is Outlook.MailItem)
        {
            Outlook.MailItem oMail = 
                oInsp.CurrentItem as Outlook.MailItem;
            if (oMail.Sent == true)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    else
    {
        return true;
    }
}

此演练详细介绍了用于在 Outlook 2010 中扩展功能区的最重要策略。总之,您的代码应支持以下操作:

  • 在 Outlook 2010 中使用多个浏览器或检查器窗口。将窗口包装在可引发与该特定窗口相对应的事件的单独类实例中。

  • 相应使用 IRibbonUI 接口的 InvalidateControl 或 Invalidate 方法以引发回调发生。

  • 在事件处理程序和功能区回调中评估不同的项目类型(基于特定项目类型的邮件类、内置属性或自定义属性)。

功能区标识符

下表列出了传递给 IRibbonExtensibility 接口的 GetCustomUI 方法的功能区 ID。使用功能区 ID 确定要在 GetCustomUI 方法中返回的 XML。

表 1. 功能区 ID 和邮件类

功能区 ID

邮件类

Microsoft.OMS.MMS.Compose

IPM.Note.Mobile.MMS.*

Microsoft.OMS.MMS.Read

IPM.Note.Mobile.MMS.*

Microsoft.OMS.SMS.Compose

IPM.Note.Mobile.SMS.*

Microsoft.OMS.SMS.Read

IPM.Note.Mobile.SMS.*

Microsoft.Outlook.Appointment

IPM.Appointment.*

Microsoft.Outlook.Contact

IPM.Contact.*

Microsoft.Outlook.DistributionList

IPM.DistList.*

Microsoft.Outlook.Journal

IPM.Activity.*

Microsoft.Outlook.Mail.Compose

IPM.Note.*

Microsoft.Outlook.Mail.Read

IPM.Note.*

Microsoft.Outlook.MeetingRequest.Read

IPM.Schedule.Meeting.Request or IPM.Schedule.Meeting.Canceled

Microsoft.Outlook.MeetingRequest.Send

IPM.Schedule.Meeting.Request

Microsoft.Outlook.Post.Compose

IPM.Post.*

Microsoft.Outlook.Post.Read

IPM.Post.*

Microsoft.Outlook.Report

IPM.Report.*

Microsoft.Outlook.Resend

IPM.Resend.*

Microsoft.Outlook.Response.Compose

IPM.Schedule.Meeting.Resp.*

Microsoft.Outlook.Response.CounterPropose

IPM.Schedule.Meeting.Resp.*

Microsoft.Outlook.Response.Read

IPM.Schedule.Meeting.Resp.*

Microsoft.Outlook.RSS

IPM.Post.Rss.*

Microsoft.Outlook.Sharing.Compose

IPM.Sharing.*

Microsoft.Outlook.Sharing.Read

IPM.Sharing.*

Microsoft.Outlook.Task

IPM.Task.* 和 IPM.TaskRequest.*

Microsoft.Outlook.Explorer

不适用。使用此功能区 ID 可返回浏览器功能区、上下文菜单和 Backstage 视图的 XML 标记。

浏览器

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer(该链接可能指向英文页面) 对象

备注

当 Outlook 2010 启动时,它会调用 IRibbonExtensibility 接口的 GetCustomUI 方法并在加载项的 RibbonID 参数中指定功能区 ID。加载项应实现 GetCustomUI 方法,以便在 RibbonID 为 Microsoft.Outlook.Explorer 时,GetCustomUI 返回浏览器和上下文菜单自定义项的 XML 标记。

XML 标记示例

  
<ribbon>
    <tabs>
        <tab id="MyTab"
            getVisible="MyTab_GetVisible"
            label="MyTab">
            <group label="MyGroup" id="MyGroup">
                <button id="MyButton"
                    size="large"
                    label="MyButton"
                    imageMso="HappyFace"
                    onAction="OnMyButtonClick"/>
            </group>
        </tab>
    </tabs>
</ribbon>

用户界面示例

图 1. 扩展浏览器功能区

扩展浏览器功能区

检查器

功能区 ID

Outlook 支持检查器中显示不同项目类型的不同功能区。根据要显示在检查器中的项目的邮件类,加载项应期望 Outlook 将相应功能区 ID 作为 RibbonID 参数传递给 GetCustomUI 方法。

表 2. 功能区 ID 和邮件类

功能区 ID

邮件类

Microsoft.OMS.MMS.Compose

IPM.Note.Mobile.MMS.*

Microsoft.OMS.MMS.Read

IPM.Note.Mobile.MMS.*

Microsoft.OMS.SMS.Compose

IPM.Note.Mobile.SMS.*

Microsoft.OMS.SMS.Read

IPM.Note.Mobile.SMS.*

Microsoft.Outlook.Appointment

IPM.Appointment.*

Microsoft.Outlook.Contact

IPM.Contact.*

Microsoft.Outlook.DistributionList

IPM.DistList.*

Microsoft.Outlook.Journal

IPM.Activity.*

Microsoft.Outlook.Mail.Compose

IPM.Note.*

Microsoft.Outlook.Mail.Read

IPM.Note.*

Microsoft.Outlook.MeetingRequest.Read

IPM.Schedule.Meeting.Request or IPM.Schedule.Meeting.Canceled

Microsoft.Outlook.MeetingRequest.Send

IPM.Schedule.Meeting.Request

Microsoft.Outlook.Post.Compose

IPM.Post.*

Microsoft.Outlook.Post.Read

IPM.Post.*

Microsoft.Outlook.Report

IPM.Report.*

Microsoft.Outlook.Resend

IPM.Resend.*

Microsoft.Outlook.Response.Compose

IPM.Schedule.Meeting.Resp.*

Microsoft.Outlook.Response.CounterPropose

IPM.Schedule.Meeting.Resp.*

Microsoft.Outlook.Response.Read

IPM.Schedule.Meeting.Resp.*

Microsoft.Outlook.RSS

IPM.Post.Rss.*

Microsoft.Outlook.Sharing.Compose

IPM.Sharing.*

Microsoft.Outlook.Sharing.Read

IPM.Sharing.*

Microsoft.Outlook.Task

IPM.Task.* 和 IPM.TaskRequest.*

IRibbonControl.Context

Inspector(该链接可能指向英文页面) 对象

备注

当 Outlook 2010 显示内置邮件类的第一个检查器时,Outlook 会调用 IRibbonExtensibility 接口的 GetCustomUI 方法并在加载项的 RibbonID 参数中指定功能区 ID。加载项应实现 GetCustomUI 方法,以便 GetCustomUI 基于 RibbonID 返回相应的 XML 标记。

使用 Inspector 对象的 CurrentItem(该链接可能指向英文页面) 属性来返回项目级对象,例如 MailItem(该链接可能指向英文页面)AppointmentItem(该链接可能指向英文页面)ContactItem(该链接可能指向英文页面)TaskItem(该链接可能指向英文页面)

XML 标记示例

  
<ribbon>
    <tabs>
        <tab id="MyTab"
            getVisible="MyTab_GetVisible"
            label="MyTab">
            <group label="MyGroup" id="MyGroup" >
                <button id="MyButton"
                    size="large"
                    label="MyButton"
                    imageMso="HappyFace"
                    onAction="OnMyButtonClick"/>
            </group>
        </tab>
    </tabs>
</ribbon>

用户界面示例

图 2. 扩展检查器功能区

扩展检查人员功能区

文件夹上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Folder(该链接可能指向英文页面) 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在导航窗格中的"文件夹列表"中选择了一个文件夹。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuFolder">
        <button id="MyContextMenuFolder"
            label="ContextMenuFolder"
            onAction="OnMyButtonClick" />
    </contextMenu>  
</contextMenus>

用户界面示例

图 3. 为"文件夹列表"中的文件夹扩展上下文菜单

为文件夹扩展上下文菜单

根搜索文件夹上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Folder 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在导航窗格中的"文件夹列表"中选择了根搜索文件夹"搜索文件夹"。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuSearchRoot">
        <button id="MyContextMenuSearchRoot"
            label="ContextMenuSearchRoot"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 4. 为根搜索文件夹扩展上下文菜单

为根搜索文件夹扩展上下文菜单

存储上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Store(该链接可能指向英文页面) 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在导航窗格中的"文件夹列表"中选择了一个存储文件夹。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuStore">
        <button id="MyContextMenuStore"
            label="ContextMenuStore"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 5. 为存储文件夹扩展上下文菜单

为存储文件夹扩展上下文菜单

邮件项目的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Selection(该链接可能指向英文页面) 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在当前视图中选择了一个邮件项目。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuMailItem">
        <button id="MyContextMenuMailItem"
            label="ContextMenuMailItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 6. 为邮件项目扩展上下文菜单

为邮件项扩展上下文菜单

多个选定项目的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Selection 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在当前视图中选择了多个项目。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuMultipleItems">
        <button id="MyContextMenuMultipleItems"
            label="ContextMenuMultipleItems"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 7. 为多个选中的项目扩展上下文菜单

为多个选中的项目扩展上下文菜单

约会或会议请求的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Selection 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在当前日历视图中选择了一个约会或会议请求。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuCalendarItem">
        <button id="MyContextMenuCalendarItem"
            label="ContextMenuCalendarItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 8. 为会议组织者的日历中的会议请求扩展上下文菜单

为会议请求扩展上下文菜单

任务项目的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Selection 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在当前任务视图中选择了一个任务项目。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuTaskItem">
        <button id="MyContextMenuTaskItem"
            label="ContextMenuTaskItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 9. 为任务项目扩展上下文菜单

为任务项扩展内容菜单

联系人项目的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Selection 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在当前视图中选择了一个联系人项目。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuContactItem">
        <button id="MyContextMenuContactItem"
            label="ContextMenuContactItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 10. 为联系人项目扩展上下文菜单

为联系人项添加上下文菜单

日记项目的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Selection 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在当前视图中选择了一个日记项目。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuJournalItem">
        <button id="MyContextMenuJournalItem" 
            label="ContextMenuJournalItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 11. 为日记项目扩展上下文菜单

为日记项目扩展上下文菜单

便笺项目的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Selection 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在当前视图中选择了一个便笺项目。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuNoteItem">
        <button id="MyContextMenuNoteItem"
            label="ContextMenuNoteItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 12. 为便笺项目扩展上下文菜单

为会议纪录项目扩展上下文菜单

快捷方式上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

OutlookBarShortcut(该链接可能指向英文页面) 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在"快捷方式"模块中选择了一个快捷方式。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuShortcut">
        <button id="MyContextMenuShortcut"
            label="ContextMenuShortcut"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 13. 为"快捷方式"模块中的快捷方式扩展上下文菜单

为快捷方式扩展上下文菜单

附件上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

AttachmentSelection(该链接可能指向英文页面) 对象

备注

当 Outlook 2010 显示以下上下文菜单时,在浏览器或检查器中的"阅读窗格"中选择了一个或多个附件。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuAttachment">
        <button id="MyContextMenuAttachment"
            label="ContextMenuAttachment"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 14. 为"阅读窗格"中的一个或多个附件扩展上下文菜单

为附件扩展上下文菜单

表视图上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

View(该链接可能指向英文页面) 对象

备注

当用户在表视图中显示上下文菜单时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuTableView">
        <button id="MyContextMenuTableView"
            label="ContextMenuTableView"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 15. 在表视图中扩展上下文菜单

在表视图中扩展上下文菜单

日历视图上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

View 对象

备注

当用户在日历视图中显示上下文菜单时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuCalendarView">
        <button id="MyContextMenuCalendarView" 
            label="ContextMenuCalendarView" 
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 16. 在日历视图中扩展上下文菜单

在日历视图中扩展上下文菜单

卡视图上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

View 对象

备注

当用户在卡视图中显示上下文菜单时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuCardView">
        <button id="MyContextMenuCardView" 
            label="ContextMenuCardView" 
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 17. 在卡视图中扩展上下文菜单

在卡视图中扩展上下文菜单

时间线视图上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

View 对象

备注

当用户在时间线视图中显示上下文菜单时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuTimelineView">
        <button id="MyContextMenuTimelineView" 
            label="ContextMenuTimelineView" 
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 18. 在时间线视图中扩展上下文菜单

在时间线视图中扩展上下文菜单

"排列方式"命令的菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户在表视图中指向字段的上下文菜单中的"排列方式"时,Outlook 2010 将显示以下菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuTableArrangeBy">
        <button id="MyContextMenuTableArrangeBy" 
            label="ContextMenuTableArrangeBy" 
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 19. 在表视图中扩展"排列方式"菜单

在表视图中扩展"排列方式"菜单

时间条的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户在日历视图中右键单击时间条时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuCalendarViewTimeBar">
        <button id="MyContextMenuCalendarViewTimeBar" 
            label="ContextMenuCalendarViewTimeBar" 
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 20. 在日历视图中为时间条扩展上下文菜单

为时间条扩展上下文菜单

"忙/闲"条的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户在日历视图中右键单击"忙/闲"条时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuCalendarViewFreeBusyBar">
        <button id="MyContextMenuCalendarViewFreeBusyBar" 
            label="ContextMenuCalendarViewFreeBusyBar" 
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 21. 在日历视图中为"忙/闲"条扩展上下文菜单

为"空闲/忙碌"条扩展上下文菜单

表视图列的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户在表视图中右键单击列标题时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuTableViewColumn">
        <button id="MyContextMenuTableViewColumn" 
            label="ContextMenuTableViewColumn" 
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 22. 为表视图中的列扩展上下文菜单

为表视图列扩展上下文菜单

类别上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户右键单击一个类别时,或在未指定任何类别且用户在表视图中的"类别"列下右键单击时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuCategories">
        <button id="MyContextMenuCategories"
            label="ContextMenuCategories"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 23. 为类别扩展上下文菜单

为类别扩展上下文菜单

快速标记的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户显示快速标记的上下文菜单时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuQuickFlags">
        <button id="MyContextMenuQuickFlags"
            label="ContextMenuQuickFlags"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 24. 为快速标记扩展上下文菜单

为快速标记扩展上下文菜单

已标记的邮件项的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户显示"待办事项"栏中已标记的邮件项的上下文菜单时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

<contextMenus>    
    <contextMenu idMso="ContextMenuFlaggedMailItem">
        <button id="MyContextMenuFlaggedMailItem"
            label="ContextMenuFlaggedMailItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>
</contextMenus>

用户界面示例

图 25. 为已标记的邮件项扩展上下文菜单

为已标记的邮件项扩展上下文菜单

已标记的联系人项的上下文菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户显示"待办事项"栏中已标记的邮件项的上下文菜单时,Outlook 2010 将显示以下上下文菜单。

XML 标记示例

<contextMenus>    
    <contextMenu idMso="ContextMenuFlaggedContactItem">
        <button id="MyContextMenuFlaggedContactItem"
            label="ContextMenuFlaggedContactItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>
</contextMenus>

用户界面示例

图 26. 为已标记的联系人项扩展上下文菜单

为标记的联系人项扩展上下文菜单

邮件模块的"新项目"菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户选择"邮件"模块的浏览器功能区的"主页"选项卡中的"新项目"时,Outlook 2010 将显示以下菜单。虽然"新项目"菜单不是上下文菜单,但应将自定义菜单项的标记放在 <contextMenus></contextMenus> 标记内。这样,便可以将基于自定义邮件类的项目的命令添加到内置的"新项目"菜单中。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="MenuMailNewItem">
        <button id="MyMenuMailNewItem"
            label="MenuNewMailItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 27. 为邮件模块扩展"新项目"菜单

为邮件模块扩展"新项"菜单

日历模块的"新项目"菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户单击"日历"模块的浏览器功能区的"主页"选项卡中的"新项目"时,Outlook 2010 将显示以下菜单。虽然"新项目"菜单不是上下文菜单,但应将自定义菜单项的标记放在 <contextMenus></contextMenus> 标记内。这样,便可以将基于自定义邮件类的项目的命令添加到内置的"新项目"菜单中。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="MenuCalendarNewItem">
        <button id="MyMenuCalendarNewItem"
            label="MenuCalendarNewItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 28. 为日历模块扩展"新项目"菜单

为日历模块扩展新项目菜单

联系人模块的"新项目"菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户单击"联系人"模块的浏览器功能区的"主页"选项卡中的"新项目"时,Outlook 2010 将显示以下菜单。虽然"新项目"菜单不是上下文菜单,但应将自定义菜单项的标记放在 <contextMenus></contextMenus> 标记内。这样,便可以将基于自定义邮件类的项目的命令添加到内置的"新项目"菜单中。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="MenuContactsNewItem">
        <button id="MyMenuContactsNewItem"
            label="MenuContactsNewItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 29. 为联系人模块扩展"新项目"菜单

为联系人模块扩展新项目

任务模块的"新项目"菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户单击"任务"模块的浏览器功能区的"主页"选项卡中的"新项目"时,Outlook 2010 将显示以下菜单。虽然"新项目"菜单不是上下文菜单,但应将自定义菜单项的标记放在 <contextMenus></contextMenus> 标记内。这样,便可以将基于自定义邮件类的项目的命令添加到内置的"新项目"菜单中。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="MenuTasksNewItem">
        <button id="MyMenuTasksNewItem"
            label="MenuTasksNewItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 30. 为任务模块扩展"新项目"菜单

为任务模块扩展新项菜单

日记模块的"新项目"菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户单击"日记"模块的浏览器功能区的"主页"选项卡中的"新项目"时,Outlook 2010 将显示以下菜单。虽然"新项目"菜单不是上下文菜单,但应将自定义菜单项的标记放在 <contextMenus></contextMenus> 标记内。这样,便可以将基于自定义邮件类的项目的命令添加到内置的"新项目"菜单中。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="MenuJournalNewItem">
        <button id="MyMenuJournalNewItem"
            label="MenuJournalNewItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 31. 为日记模块扩展"新项目"菜单

为日记模块扩展新项目菜单

便笺模块的"新项目"菜单

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象

备注

当用户单击"便笺"模块的浏览器功能区的"主页"选项卡中的"新项目"时,Outlook 2010 将显示以下菜单。虽然"新项目"菜单不是上下文菜单,但应将自定义菜单项的标记放在 <contextMenus></contextMenus> 标记内。这样,便可以将基于自定义邮件类的项目的命令添加到内置的"新项目"菜单中。

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="MenuNotesNewItem">
        <button id="MyMenuNotesNewItem"
            label="MenuNotesNewItem"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 32. 为便笺模块扩展"新项目"菜单

为会议纪要模块扩展新项目菜单

发件人或收件人的个人上下文菜单

功能区 ID

Microsoft.Mso.IMLayerUI

IRibbonControl.Context

Office.IMsoContactCard 对象

备注

当用户右键单击 Outlook 项目的发件人或收件人时,Outlook 2010 将显示个人上下文菜单。若要确定发件人或收件人的身份,请使用 Office 对象模型中的 IMsoContactCard 对象的 Address 属性来获取 Outlook 对象模型中的 AddressEntry(该链接可能指向英文页面) 对象,它表示收件人,如下面的代码示例中所示。

if (control.Context is Microsoft.Office.Core.IMsoContactCard)
{
    msg = "Context=IMsoContactCard" + "\n";
    Office.IMsoContactCard card = control.Context as Office.IMsoContactCard;
    Outlook.AddressEntry addr =
        Globals.ThisAddIn.Application.Session.GetAddressEntryFromID(
        card.Address);
    if (addr != null)
    {
        msg = msg + addr.Name;
    }
    MessageBox.Show(msg);
}

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuContactCardRecipient">
        <button id="MyContextMenuContactCardRecipient"
            label="ContextMenuContactCardRecipient"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 33. 为收件人扩展个人上下文菜单

扩展个人上下文菜单

可选交互的菜单

功能区 ID

Microsoft.Mso.IMLayerUI

IRibbonControl.Context

Office.IMsoContactCard 对象

备注

若要使用电子邮件、即时消息或电话以外的方式与联系人进行交互,用户可以指定"联系人卡片"的快捷方式菜单上的替代形式。若要显示"联系人卡片",用户可以将指针停留在 Outlook 项目的发件人或收件人上,或者单击或右键单击它。

若要确定发件人或收件人的身份,请使用 Office 对象模型中的 IMsoContactCard 对象的 Address 属性来获取 Outlook 对象模型中的 AddressEntry 对象,它表示收件人,如下面的代码示例中所示。

if (control.Context is Microsoft.Office.Core.IMsoContactCard)
{
    msg = "Context=IMsoContactCard" + "\n";
    Office.IMsoContactCard card = control.Context as Office.IMsoContactCard;
    Outlook.AddressEntry addr =
        Globals.ThisAddIn.Application.Session.GetAddressEntryFromID
        (card.Address);
    if (addr != null)
    {
        msg = msg + addr.Name;
    }
    MessageBox.Show(msg);
}

XML 标记示例

  
<contextMenus>    
    <contextMenu idMso="ContextMenuContactCardOverflowDropdown">
        <button id="MyContextMenuContactCardOverflow"
            label="ContextMenuContactCardOverflow"
            onAction="OnMyButtonClick"/>
    </contextMenu>  
</contextMenus>

用户界面示例

图 34. 为联系人扩展其他互动菜单

为联系人扩展其他互动菜单

上下文选项卡

功能区 ID

Microsoft.Outlook.Explorer 或相应检查器 RibbonID

IRibbonControl.Context

Explorer 对象或 Inspector 对象

备注

当用户在 Outlook 用户界面中选择对象以编辑或修改该对象时,会显示上下文选项卡。自定义上下文选项卡类似于自定义内置功能区选项卡,但自定义项的标记使用 <contextualTabs></contextualTabs> 标记而非 <tabs></tabs>。上下文选项卡在 Outlook 2010 中的使用很广泛。下面的示例演示如何自定义附件的名为"附件工具"的上下文选项卡。以前介绍的 附件上下文菜单可以添加用于操作所选附件的上下文菜单项。若要在"附件工具"上下文选项卡中创建等效命令,您需要提供 XML 标记(如下面的 XML 标记示例中所示),然后使用 IRibbonControl.Context 返回的 AttachmentSelection 对象确定所选附件,如下面的 C# 代码段中所示:

    else if (control.Context is Outlook.Explorer)
    {
        msg = "Context=Explorer" + "\n";
        Outlook.Explorer explorer = 
            control.Context as Outlook.Explorer;
            if (explorer.AttachmentSelection.Count >= 1)
            {
                Outlook.AttachmentSelection attachSel =
                    explorer.AttachmentSelection;
                foreach (Outlook.Attachment attach in attachSel)
                {
                    msg = msg + attach.DisplayName + "\n";
                }
            }
            else
            {
                Outlook.Selection selection =
                    explorer.Selection;
                if (selection.Count == 1)
                {
                    OutlookItem olItem =
                        new OutlookItem(selection[1]);
                    msg = msg + olItem.Subject
                        + "\n" + olItem.LastModificationTime;
                }
                else
                {
                    msg = msg + "Multiple Selection Count="
                        + selection.Count;
                }
            }
        }
    }    

XML 标记示例

<contextualTabs>
    <tabSet idMso="TabSetAttachments">
        <tab idMso="TabAttachments">
            <group label="MyGroup" id="MyAttachmentGroup">
                <button id="MyButtonAttachments"
                    size="large"
                    label="MyButtonAttachments"
                    imageMso="HappyFace"
                    onAction="OnMyButtonClick" />
            </group>
        </tab>
    </tabSet>
</contextualTabs>

用户界面示例

图 35. 使用 Outlook 浏览器的"附件工具"上下文选项卡扩展"附件"选项卡

扩展"附件"选项卡

Backstage 视图

功能区 ID

Microsoft.Outlook.Explorer

IRibbonControl.Context

Explorer 对象或 Inspector 对象

备注

Backstage 视图帮助用户查找常用的功能及发现处理其文档的新方法。若要访问 Backstage 视图,请单击"主页"选项卡左侧显示的"文件"选项卡。在 Outlook 2010 中,可以使用 Backstage 视图来显示加载项的应用程序级别设置。考虑自定义 Backstage 视图以替代属性页扩展,在以前的 Outlook 版本中,可通过单击"工具",然后单击"选项"来访问属性页扩展。属性页扩展在 Outlook 2010 中仍可用,但用户可能不太容易找到它们。若要访问加载项属性页扩展,请打开 Backstage 视图,单击"选项"命令以显示"Outlook 选项"对话框,单击"加载项"选项卡,然后单击"加载选项"按钮。

Outlook 2010 可以在浏览器或检查器窗口中显示 Backstage 视图。使用 IRibbonControl.Context 属性来确定 Backstage 视图是托管在浏览器还是检查器窗口中。

Backstage 视图中的选项卡是功能单元。Backstage 视图包含默认选项卡。例如,Outlook 浏览器的 Backstage 视图包含"信息"、"打开"、"打印"和"帮助"选项卡。如果要创建自定义选项卡并只在 Outlook 浏览器或检查器窗口中显示它,请使用 GetVisible 回调。下面的 C# 代码示例使 MyPlace 选项卡只在浏览器窗口中可见。

public bool MyPlace_GetVisible(IRibbonControl control)
{
    if (control.Context is Microsoft.Office.Interop.Outlook.Explorer)
        return true;
    else
        return false;
}

XML 标记示例

<backStage>
    <tab id="MyBackStageTab"
        label="MyTab"
        getVisible="MyBackStageTab_GetVisible">
        <firstColumn>
            <group id="regularGroup"
                label="My Regular Group"
                helperText="My Regular Group Helper Text">
                <primaryItem>
                    <button id="MyHeroButton"
                        label="My Hero Button"
                        imageMso="MagicEightBall"
                        isDefinitive="false"
                        onAction="OnMyButtonClick"
                        screentip="Click to spin the magic eight ball."/>
                </primaryItem>
                <bottomItems>
                    <hyperlink
                        id="hyperlink"
                        label="Office Developer Center"
                        target="https://msdn.microsoft.com/en-  
                            us/office/default.aspx"/>
                    <imageControl id="userImage"
                        getImage="GetCurrentUserImage"/>
                    <layoutContainer id="vertical"
                        align="left"
                        layoutChildren="vertical">
                        <labelControl id="labelControl2" 
                            label="Vertical layout"/>
                        <radioGroup id="myradiogroup1" label="Options">
                            <radioButton id="rb1" label="Option 1"/>
                            <radioButton id="rb2" label="Option 2"/>
                            <radioButton id="rb3" label="Option 3"/>
                        </radioGroup>
                    </layoutContainer>
                    <groupBox id="mygroupbox1" label="Check Boxes">
                        <checkBox id="check1" label="Check Box 1"/>
                        <checkBox id="check2" label="Check Box 2"/>
                        <checkBox id="check3" label="Check Box 3"/>
                    </groupBox>
                    <layoutContainer id="vertical2"
                        align="left"
                        layoutChildren="vertical">
                        <comboBox id="comboBox" label="Color ComboBox">
                            <item id="cbi1" label="Blue"/>
                            <item id="cbi2" label="Magenta"/>
                            <item id="cbi3" label="Cyan"/>
                        </comboBox>
                    </layoutContainer>
                </bottomItems>
            </group>
            <taskGroup id="taskGroup"
                label="My Task Group"
                helperText="My Task Group Helper Text">
                <category id="MyCategory" label="My Category">
                <task id="MyTask"
                    tag="MyTask"
                    isDefinitive="true"
                    label="My Task"
                    imageMso="NewTask"/>
                </category>
            </taskGroup>
        </firstColumn>
        <secondColumn>
            <group id="myemptygroup">
            </group>
        </secondColumn>
    </tab>
</backstage>

用户界面示例

图 36. 扩展 Outlook 浏览器的 Backstage 视图

为 Outlook 浏览器扩展 Backstage 视图

结论

在 2007 Microsoft Office system 中,Fluent UI 包括在各种 Office 应用程序中显示的功能区、菜单、增强的屏幕提示、浮动工具栏和键盘快捷方式。Office 2010 向 Fluent UI 中添加了 Backstage 视图。Fluent UI 扩展性支持以编程方式自定义 Fluent UI 组件这一功能。例如,Outlook 2010 提供了许多扩展浏览器或检查器中的功能区、菜单、上下文菜单和 Backstage 视图的方法。Fluent UI 的编程扩展背后的原则都非常相似;都涉及使用 IRibbonExtensibility.GetCustomUI 指定自定义 UI 的 XML 标记和在加载项中编写回调以响应用户对自定义 UI 的操作。一致的扩展性设计使 Outlook 2010 加载项开发人员可以更加轻松地进一步增强其 UI。

其他资源

下面的资源提供了有关以编程方式增强 Office 2010 中的 Fluent UI 的详细信息:

下面的资源提供了有关如何自定义功能区的深入信息。虽然它们面向 Outlook 2007,但许多原则也适用于 Office 2010。