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

Visual Studio 中的 Office 開發工具所提供的類別和設計工具,可在您用來建立應用程式層級增益集的自訂工作窗格、功能區自訂和 Outlook 表單區域時,協助您處理許多實作細節。 但是,如果您有特別需要,也可以自行為每一項功能實作「擴充性介面」(Extensibility Interface)。

**適用於:**本主題中的資訊適用於 Microsoft Office 2010 和 2007 Microsoft Office system 的應用程式層級專案。 如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

擴充性介面概觀

Microsoft Office 定義了一組擴充性介面,可供 COM 增益集實作來自訂如功能區這類功能。 這些介面對它們所提供存取的功能具有完整控制權。 不過,實作這些介面需要先對 Managed 程式碼的 COM 互通性有一些了解。 有時候,即使是習慣 .NET Framework 的開發人員,也無法直覺聯想這些介面的程式設計模型。

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

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

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

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

介面

說明

應用程式

Microsoft.Office.Core.IRibbonExtensibility

實作這個介面可以自訂功能區 UI。

注意事項注意事項
您可以將 [功能區 (XML)] 項目加入至專案以在增益集中產生預設的 Microsoft.Office.Core.IRibbonExtensibility 實作。如需詳細資訊,請參閱功能區 XML

Excel 2007 和 Excel 2010

InfoPath 2010

Outlook 2007 和 Outlook 2010

PowerPoint 2007 和 PowerPoint 2010

Project 2010

Visio 2010

Word 2007 和 Word 2010

Microsoft.Office.Core.ICustomTaskPaneConsumer

實作這個介面可以建立自訂工作窗格。

Excel 2007 和 Excel 2010

Outlook 2007 和 Outlook 2010

PowerPoint 2007 和 PowerPoint 2010

Word 2007 和 Word 2010

Microsoft.Office.Interop.Outlook.FormRegionStartup

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

Outlook 2007 和 Outlook 2010

Microsoft Office 還定義其他好幾種擴充性介面 (例如 Microsoft.Office.Core.IBlogExtensibilityMicrosoft.Office.Core.EncryptionProviderMicrosoft.Office.Core.SignatureProvider)。 Visual Studio 不支援在以 Office 專案範本建立的增益集中實作這些介面。

使用擴充性介面

若要使用擴充性介面來實作 UI 功能,請在您的增益集專案中實作適當的介面。 接著,覆寫 RequestService 方法以傳回會實作這個介面的類別執行個體 (Instance)。

如需示範如何在 Outlook 增益集中實作 Microsoft.Office.Core.IRibbonExtensibilityMicrosoft.Office.Core.ICustomTaskPaneConsumerMicrosoft.Office.Interop.Outlook.FormRegionStartup 介面的範例應用程式,請參閱 Office 程式開發範例

擴充性介面的實作範例

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

  • TaskPaneHelper 類別會實作 Microsoft.Office.Core.ICustomTaskPaneConsumer 以建立和顯示自訂工作窗格。

  • TaskPaneUI 類別會提供工作窗格的 UI。 TaskPaneUI 類別的屬性 (Attribute) 會讓 COM 得知這個類別,進而使 Microsoft Office 應用程式發現這個類別。 在這個範例中,UI 是一個空的 UserControl,但是您可以藉由修改程式碼來加入控制項。

    注意事項注意事項

    若要將 TaskPaneUI 類別公開 (Expose) 至 COM,您必須同時設定專案的 [註冊 COM Interop] 屬性 (Property)。 如需詳細資訊,請參閱 HOW TO:註冊 COM Interop 元件

Public Class TaskPaneHelper
    Implements Office.ICustomTaskPaneConsumer

    Friend taskPane As Office.CustomTaskPane

    Public Sub CTPFactoryAvailable(ByVal CTPFactoryInst As Office.ICTPFactory) _
        Implements Office.ICustomTaskPaneConsumer.CTPFactoryAvailable

        If CTPFactoryInst IsNot Nothing Then
            ' Create a new task pane.
            taskPane = CTPFactoryInst.CreateCTP( _
                "Microsoft.Samples.Vsto.VB.TaskPaneUI", "Contoso")
            taskPane.Visible = True
        End If
    End Sub
End Class

<System.Runtime.InteropServices.ComVisible(True)> _
<System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.VB.TaskPaneUI")> _
<System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")> _
Public Class TaskPaneUI
    Inherits UserControl
End Class
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", Type.Missing);
            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
{
}

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

RequestService 方法的覆寫範例

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

Friend taskPaneHelper1 As TaskPaneHelper

Protected Overrides Function RequestService( _
    ByVal serviceGuid As Guid) As Object

    If (serviceGuid = GetType(Office.ICustomTaskPaneConsumer).GUID) Then
        If (taskPaneHelper1 Is Nothing) Then
            taskPaneHelper1 = New TaskPaneHelper()
        End If
        Return taskPaneHelper1
    End If

    Return MyBase.RequestService(serviceGuid)
End Function
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);
}

請參閱

工作

HOW TO:在 Visual Studio 中建立 Office 專案

概念

在應用程式層級增益集中呼叫其他 Office 方案的程式碼

應用程式層級增益集的架構

其他資源

Office 程式開發範例和逐步解說

應用程式層級增益集程式設計

開發 Office 方案