UI-functies aanpassen met behulp van uitbreidbaarheidsinterfaces

De Office-ontwikkelhulpprogramma's in Visual Studio bieden klassen en ontwerpers die veel implementatiedetails verwerken wanneer u ze gebruikt om aangepaste taakvensters, lintaanpassingen en Outlook-formulierregio's te maken in een VSTO-invoegtoepassing. U kunt echter ook zelf de uitbreidbaarheidsinterface voor elke functie implementeren als u speciale vereisten hebt.

Van toepassing op: De informatie in dit onderwerp is van toepassing op VSTO-invoegtoepassingsprojecten. Zie Functies die beschikbaar zijn voor de Office-toepassing en het projecttype voor meer informatie.

Microsoft Office definieert een set uitbreidbaarheidsinterfaces die COM VSTO-invoegtoepassingen kunnen implementeren om bepaalde functies aan te passen, zoals het lint. Deze interfaces bieden volledige controle over de functies die ze toegang bieden. Het implementeren van deze interfaces vereist echter enige kennis van COM-interoperabiliteit in beheerde code. In sommige gevallen is het programmeermodel van deze interfaces ook niet intuïtief voor ontwikkelaars die gewend zijn aan .NET Framework.

Wanneer u een VSTO-invoegtoepassing maakt met behulp van de Office-projectsjablonen in Visual Studio, hoeft u de uitbreidbaarheidsinterfaces niet te implementeren om functies zoals het lint aan te passen. De Visual Studio Tools voor Office Runtime implementeert deze interfaces voor u. In plaats daarvan kunt u intuïtievere klassen en ontwerpers van Visual Studio gebruiken. U kunt de uitbreidbaarheidsinterfaces echter nog steeds rechtstreeks in uw VSTO-invoegtoepassing implementeren als u dat wilt.

Voor meer informatie over de klassen en ontwerpers die Visual Studio biedt voor deze functies, zie Aangepaste taakvensters, Lintontwerpers en Outlook-formulierregio's maken.

Uitbreidbaarheidsinterfaces die u kunt implementeren in een VSTO-invoegtoepassing

De volgende tabel bevat de uitbreidbaarheidsinterfaces die u kunt implementeren en de toepassingen die deze ondersteunen.

gebruikersinterface Description Applications
IRibbonExtensibility Implementeer deze interface om de gebruikersinterface van het lint aan te passen. Noot: U kunt een Lint (XML)-item toevoegen aan een project om een standaard IRibbonExtensibility-implementatie te genereren in uw VSTO-invoegtoepassing. Zie Ribbon XML voor meer informatie. Excel

InfoPath 2013

InfoPath 2010

Vooruitzicht

PowerPoint

Project

Visio

Word
ICustomTaskPaneConsumer Implementeer deze interface om een aangepast taakvenster te maken. Excel

Vooruitzicht

PowerPoint

Word
FormRegionStartup Implementeer deze interface om een Outlook-formulierregio te maken. Vooruitzicht

Er zijn verschillende andere uitbreidbaarheidsinterfaces die zijn gedefinieerd door Microsoft Office, zoals IBlogExtensibility, EncryptionProvideren SignatureProvider. Visual Studio biedt geen ondersteuning voor het implementeren van deze interfaces in een VSTO-invoegtoepassing die is gemaakt met behulp van de Office-projectsjablonen.

Uitbreidbaarheidsinterfaces gebruiken

Als u een UI-functie wilt aanpassen met behulp van een uitbreidbaarheidsinterface, implementeert u de juiste interface in uw VSTO-invoegtoepassingsproject. Overschrijf vervolgens de RequestService methode om een exemplaar van de klasse te retourneren waarmee de interface wordt geïmplementeerd.

Voor een voorbeeldtoepassing die laat zien hoe u de IRibbonExtensibility, ICustomTaskPaneConsumeren FormRegionStartup interfaces in een VSTO-invoegtoepassing voor Outlook implementeert, raadpleegt u het UI Manager-voorbeeld in Office-ontwikkelvoorbeelden.

Voorbeeld van het implementeren van een uitbreidbaarheidsinterface

In het volgende codevoorbeeld ziet u een eenvoudige implementatie van de ICustomTaskPaneConsumer interface om een aangepast taakvenster te maken. In dit voorbeeld worden twee klassen gedefinieerd:

  • De TaskPaneHelper klasse implementeert ICustomTaskPaneConsumer om een aangepast taakvenster te maken en weer te geven.

  • De TaskPaneUI klasse biedt de gebruikersinterface van het taakvenster. De kenmerken voor de klasse maken de TaskPaneUI klasse zichtbaar voor COM, waardoor Microsoft Office-toepassingen de klasse kunnen detecteren. In dit voorbeeld is de gebruikersinterface leeg UserControl, maar u kunt besturingselementen toevoegen door de code te wijzigen.

    Opmerking

    Als u de TaskPaneUI klasse beschikbaar wilt maken voor COM, moet u ook de eigenschap Register voor COM Interop instellen voor het project.

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

Zie ICustomTaskPaneConsumer in de Microsoft Office-documentatie voor meer informatie over het implementeren.

Voorbeeld van het overschrijven van de methode RequestService

In het volgende codevoorbeeld ziet u hoe u de RequestService methode overschrijft voor het retourneren van een exemplaar van de TaskPaneHelper klasse uit het vorige codevoorbeeld. De parameter serviceGuid controleert de waarde om te bepalen welke interface wordt aangevraagd en retourneert vervolgens een object dat die interface implementeert.

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