Personalización de las características de la interfaz de usuario mediante interfaces de extensibilidad

Las herramientas de desarrollo de Office en Visual Studio proporcionan clases y diseñadores que administran numerosos detalles de la implementación cuando se usan para crear paneles de tareas personalizados, personalizaciones de la cinta y regiones de formularios de Outlook en un complemento VSTO. Sin embargo, también puede implementar la interfaz de extensibilidad para cada característica si tiene necesidades especiales.

Se aplica a: La información de este tema se aplica a los proyectos de complemento de VSTO. Para obtener más información, consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

Microsoft Office define un conjunto de interfaces de extensibilidad que los complementos COM VSTO pueden implementar para personalizar determinadas características, como la cinta. Estas interfaces proporcionan un control completo sobre las características a las que proporcionan acceso. Sin embargo, para implementar estas interfaces se necesitan conocimientos sobre la interoperabilidad de COM en código administrado. En algunos casos, el modelo de programación de estas interfaces tampoco resulta intuitivo para los desarrolladores que están acostumbrados a .NET Framework.

Cuando se crea un complemento VSTO mediante las plantillas de proyecto de Office en Visual Studio, no es necesario implementar las interfaces de extensibilidad para personalizar características como la cinta. El entorno de ejecución de Visual Studio Tools para Office implementa estas interfaces automáticamente. En su lugar, puede usar las clases y los diseñadores más intuitivos que Visual Studio proporciona. Sin embargo, puede implementar las interfaces de extensibilidad directamente en su complemento VSTO si lo desea.

Para obtener más información sobre las clases y diseñadores que Visual Studio proporciona para estas características, vea Paneles de tareas personalizados, diseñador de cinta de opciones y crear áreas de formulario de Outlook.

Interfaces de extensibilidad que puede implementar en un complemento de VSTO

La tabla siguiente enumera las interfaces de extensibilidad que puede implementar, y las aplicaciones que las admiten.

Interfaz Descripción Aplicaciones
IRibbonExtensibility Implemente esta interfaz para personalizar la interfaz de usuario de la cinta. Nota: Puede agregar un elemento de cinta de opciones (XML) a un proyecto para generar una implementación predeterminada IRibbonExtensibility en el complemento de VSTO. Para obtener más información, consulta Ribbon XML. Excel

InfoPath 2013

InfoPath 2010

Outlook

PowerPoint

Project

Visio

Word
ICustomTaskPaneConsumer Implemente esta interfaz para crear un panel de tareas personalizado. Excel

Outlook

PowerPoint

Word
FormRegionStartup Implemente esta interfaz para crear una región de formulario de Outlook. Outlook

Hay algunas otras interfaces de extensibilidad definidas por Microsoft Office, como IBlogExtensibility, EncryptionProvidery SignatureProvider. Visual Studio no permite implementar estas interfaces en un complemento VSTO creado mediante plantillas de proyectos de Office.

Uso de interfaces de extensibilidad

Para personalizar una característica de interfaz de usuario , mediante una interfaz de extensibilidad, implemente la interfaz apropiada en su proyecto de complemento VSTO. Después, invalide el método RequestService para que devuelva una instancia de la clase que implementa la interfaz.

Para obtener una aplicación de ejemplo que muestre cómo implementar las IRibbonExtensibilityinterfaces , ICustomTaskPaneConsumery FormRegionStartup en un complemento de VSTO para Outlook, vea el ejemplo de Administrador de interfaz de usuario en ejemplos de desarrollo de Office.

Ejemplo de implementación de una interfaz de extensibilidad

El ejemplo de código siguiente muestra una implementación simple de la interfaz ICustomTaskPaneConsumer para crear un panel de tareas personalizado. Este ejemplo define dos clases:

  • La clase TaskPaneHelper implementa ICustomTaskPaneConsumer para crear y mostrar un panel de tareas personalizado.

  • La clase TaskPaneUI proporciona la interfaz de usuario del panel de tareas. Los atributos de la clase TaskPaneUI hacen que la clase sea visible para COM, lo que permite que las aplicaciones de Microsoft Office detecten la clase. En este ejemplo, la interfaz de usuario es un UserControlvacío, pero puede agregar controles modificando el código.

    Nota:

    Para exponer la clase TaskPaneUI a COM, también debe establecer la propiedad Registrar para interoperabilidad COM para el proyecto.

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

Para obtener más información sobre cómo implementar ICustomTaskPaneConsumer, vea Crear paneles de tareas personalizados en el sistema de Office 2007 en la documentación de Microsoft Office.

Ejemplo de invalidación del método RequestService

El siguiente código de ejemplo muestra cómo invalidar el método RequestService para devolver una instancia de la clase TaskPaneHelper del ejemplo de código anterior. Comprueba el valor del parámetro serviceGuid para determinar qué interfaz se está solicitando, y devuelve un objeto que implementa esa interfaz.

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