Dostosowywanie funkcji interfejsu użytkownika przy użyciu interfejsów rozszerzalności

Narzędzia programistyczne pakietu Office w programie Visual Studio udostępniają klasy i projektantów, które obsługują wiele szczegółów implementacji podczas ich używania do tworzenia niestandardowych okienek zadań, dostosowań wstążki i regionów formularzy programu Outlook w dodatku VSTO. Jednak można również zaimplementować interfejs rozszerzalności dla każdej funkcji samodzielnie, jeśli masz specjalne wymagania.

Dotyczy: informacje w tym temacie dotyczą projektów dodatków VSTO. Aby uzyskać więcej informacji, zobacz Funkcje dostępne przez aplikacja pakietu Office lication i typ projektu.

Pakiet Microsoft Office definiuje zestaw interfejsów rozszerzalności, które dodatki COM VSTO mogą implementować w celu dostosowania niektórych funkcji, takich jak wstążka. Te interfejsy zapewniają pełną kontrolę nad funkcjami, do których zapewniają dostęp. Jednak implementacja tych interfejsów wymaga pewnej wiedzy na temat współdziałania modelu COM w kodzie zarządzanym. W niektórych przypadkach model programowania tych interfejsów nie jest również intuicyjny dla deweloperów, którzy są przyzwyczajeni do programu .NET Framework.

Podczas tworzenia dodatku VSTO przy użyciu szablonów projektów pakietu Office w programie Visual Studio nie trzeba implementować interfejsów rozszerzalności, aby dostosować funkcje takie jak wstążka. Środowisko uruchomieniowe Visual Studio Tools dla pakietu Office implementuje te interfejsy. Zamiast tego można użyć bardziej intuicyjnych klas i projektantów udostępnianych przez program Visual Studio. Jednak nadal można zaimplementować interfejsy rozszerzalności bezpośrednio w dodatku VSTO, jeśli chcesz.

Aby uzyskać więcej informacji na temat klas i projektantów oferowanych przez program Visual Studio dla tych funkcji, zobacz Niestandardowe okienka zadań, Projektant wstążki i Tworzenie regionów formularzy programu Outlook.

Interfejsy rozszerzalności, które można zaimplementować w dodatku VSTO

W poniższej tabeli wymieniono interfejsy rozszerzalności, które można zaimplementować, oraz aplikacje, które je obsługują.

Interfejs opis Aplikacje
IRibbonExtensibility Zaimplementuj ten interfejs, aby dostosować interfejs użytkownika wstążki. Uwaga: do projektu można dodać element wstążki (XML), aby wygenerować domyślną IRibbonExtensibility implementację w dodatku VSTO. Aby uzyskać więcej informacji, zobacz Plik XML wstążki. Excel

InfoPath 2013

InfoPath 2010

Outlook

PowerPoint

Project

Visio

Word
ICustomTaskPaneConsumer Zaimplementuj ten interfejs, aby utworzyć niestandardowe okienko zadań. Excel

Outlook

PowerPoint

Word
FormRegionStartup Zaimplementuj ten interfejs, aby utworzyć region formularza programu Outlook. Outlook

Istnieje kilka innych interfejsów rozszerzalności zdefiniowanych przez pakiet Microsoft Office, takich jak IBlogExtensibility, EncryptionProvideri SignatureProvider. Program Visual Studio nie obsługuje implementowania tych interfejsów w dodatku VSTO utworzonym przy użyciu szablonów projektów pakietu Office.

Korzystanie z interfejsów rozszerzalności

Aby dostosować funkcję interfejsu użytkownika przy użyciu interfejsu rozszerzalności, zaimplementuj odpowiedni interfejs w projekcie dodatku VSTO. Następnie przesłoń metodę RequestService , aby zwrócić wystąpienie klasy, która implementuje interfejs.

Aby zapoznać się z przykładową aplikacją, która pokazuje, jak zaimplementować IRibbonExtensibilityinterfejsy , ICustomTaskPaneConsumeri FormRegionStartup w dodatku VSTO dla programu Outlook, zobacz przykład menedżera interfejsu użytkownika w przykładach programowania pakietu Office.

Przykład implementacji interfejsu rozszerzalności

Poniższy przykład kodu przedstawia prostą implementację interfejsu ICustomTaskPaneConsumer w celu utworzenia niestandardowego okienka zadań. W tym przykładzie zdefiniowano dwie klasy:

  • Klasa TaskPaneHelper implementuje ICustomTaskPaneConsumer tworzenie i wyświetlanie niestandardowego okienka zadań.

  • Klasa TaskPaneUI udostępnia interfejs użytkownika okienka zadań. Atrybuty klasy TaskPaneUI sprawiają, że klasa jest widoczna dla modelu COM, co umożliwia aplikacja pakietu Office licationom firmy Microsoft odnajdywanie klasy. W tym przykładzie interfejs użytkownika jest pusty UserControl, ale możesz dodać kontrolki, modyfikując kod.

    Uwaga

    Aby uwidocznić klasę TaskPaneUI com, należy również ustawić właściwość Register for COM Interop dla projektu.

    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
    {
    }
    

Aby uzyskać więcej informacji na temat implementowania ICustomTaskPaneConsumerprogramu , zobacz Tworzenie niestandardowych okienek zadań w systemie Office 2007 w dokumentacji pakietu Microsoft Office.

Przykład zastępowania metody RequestService

Poniższy przykład kodu pokazuje, jak zastąpić metodę RequestService , aby zwrócić wystąpienie TaskPaneHelper klasy z poprzedniego przykładu kodu. Sprawdza wartość parametru serviceGuid , aby określić, który interfejs jest żądany, a następnie zwraca obiekt, który implementuje ten interfejs.

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);
}