使用擴充性介面自訂 UI 功能

當您使用 Visual Studio 中的 Office 開發工具,在 VSTO 增益集中建立自訂工作窗格、功能區自訂和 Outlook 表單區域時,這些工具提供可處理許多實作詳細資料的類別和設計工具。 不過,如果您有特殊需求,也可以針對每項功能自行實作 「擴充性介面」 (Extensibility Interface)。

適用對象: 本主題資訊適用於 VSTO 增益集專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

Microsoft Office 定義一組 COM VSTO 增益集可實作以自訂特定功能 (例如功能區) 的擴充性介面。 這些介面提供可存取功能的完整控制權。 然而,您需要對 Managed 程式碼中的 COM 互通性有些了解,才能實作這些介面。 在某些情況下,這些介面的程式撰寫模型對熟悉 .NET Framework 的開發人員而言,也不是那麼直接易懂。

當您使用 Visual Studio 中的 Office 專案範本建立 VSTO 增益集時,您不需要實作擴充性介面來自訂功能區等功能。 Visual Studio Tools for Office Runtime 會為您實作這些介面。 相反地,您可以使用 Visual Studio 所提供之更直覺的類別和設計工具。 不過,如果需要,您仍可直接在 VSTO 增益集中實作擴充性介面。

如需 Visual Studio 為這些功能提供之類別和設計工具的詳細資訊,請參閱自訂工作窗格功能區設計工具,以及建立 Outlook 表單區域

您可以在 VSTO 增益集中實作的擴充性介面

下表列出您可以實作的擴充性介面,以及支援這些介面的應用程式。

介面 描述 應用程式
IRibbonExtensibility 實作這個介面可自訂功能區 UI。 附註:您可以將 [功能區 (XML)] 項目新增至專案,以在 VSTO 增益集中產生預設 IRibbonExtensibility 實作。 如需詳細資訊,請參閱 Ribbon XML Excel

InfoPath 2013

InfoPath 2010

Outlook

PowerPoint

Project

Visio

Word
ICustomTaskPaneConsumer 實作這個介面可建立自訂工作窗格。 Excel

Outlook

PowerPoint

Word
FormRegionStartup 實作這個介面可建立 Outlook 表單區域。 Outlook

Microsoft Office 還定義其他幾個擴充性介面,例如 IBlogExtensibilityEncryptionProviderSignatureProvider。 Visual Studio 不支援在使用 Office 專案範本建立的 VSTO 增益集中實作這些介面。

使用擴充性介面

若要使用擴充性介面自訂 UI 功能,請在您的 VSTO 增益集專案中實作適當的介面。 然後,覆寫 RequestService 方法以傳回實作介面的類別執行個體。

如需示範如何在 Outlook VSTO 增益集中實作 IRibbonExtensibilityICustomTaskPaneConsumerFormRegionStartup 介面的範例應用程式,請參閱 Office 程式開發範例

實作擴充性介面的範例

下列程式碼範例示範 ICustomTaskPaneConsumer 介面的簡單實作,以建立自訂工作窗格。 這個範例會定義兩個類別:

  • TaskPaneHelper 類別實作 ICustomTaskPaneConsumer ,以建立及顯示自訂工作窗格。

  • TaskPaneUI 類別提供工作窗格的 UI。 TaskPaneUI 類別的屬性讓 COM 可以看見該類別,進而讓 Microsoft Office 應用程式可以探索該類別。 在這個範例中,UI 是空的 UserControl,但是您可以透過修改程式碼來加入控制項。

    注意

    若要將 TaskPaneUI 類別公開至 COM,您也必須設定專案的 [註冊 COM Interop] 屬性。

    public class TaskPaneHelper : Office.ICustomTaskPaneConsumer
    {
        internal Office.CustomTaskPane taskPane;
    
        public void CTPFactoryAvailable(Office.ICTPFactory CTPFactoryInst)
        {
            if (CTPFactoryInst != null)
            {
                // Create a new task pane.
                taskPane = CTPFactoryInst.CreateCTP(
                    "Microsoft.Samples.Vsto.CS.TaskPaneUI",
                    "Contoso");
                taskPane.Visible = true;
            }
        }
    }
    
    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.CS.TaskPaneUI")]
    [System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")]
    public class TaskPaneUI : UserControl
    {
    }
    

如需實作 ICustomTaskPaneConsumer的詳細資訊,請參閱 Microsoft Office 文件中的 在 2007 Office System 中建立自訂工作窗格

覆寫 RequestService 方法的範例

下列程式碼範例示範如何覆寫 RequestService 方法,以從先前的程式碼範例傳回 TaskPaneHelper 類別的執行個體。 它會檢查 serviceGuid 參數的值以判斷所要求的介面,然後傳回實作該介面的物件。

internal TaskPaneHelper taskPaneHelper1;

protected override object RequestService(Guid serviceGuid)
{
    if (serviceGuid == typeof(Office.ICustomTaskPaneConsumer).GUID)
    {
        if (taskPaneHelper1 == null)
        {
            taskPaneHelper1 = new TaskPaneHelper();
        }
        return taskPaneHelper1;
    }

    return base.RequestService(serviceGuid);
}