Compartir a través de


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 controlan muchos detalles de implementación cuando se usan para crear paneles de tareas personalizados, personalizaciones de cinta de opciones y áreas de formulario de Outlook en un complemento de VSTO. Sin embargo, también puede implementar la interfaz de extensibilidad para cada característica usted mismo si tiene requisitos 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, vea Características disponibles por aplicación de Office y tipo de proyecto.

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

Al crear un complemento de 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 de opciones. El entorno de ejecución de Visual Studio Tools para Office implementa estas interfaces automáticamente. En su lugar, puede usar clases y diseñadores más intuitivos proporcionados por Visual Studio. Sin embargo, todavía puede implementar las interfaces de extensibilidad directamente en el complemento de 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

En la tabla siguiente se enumeran las interfaces de extensibilidad que puede implementar y las aplicaciones que las admiten.

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

InfoPath 2013

InfoPath 2010

Perspectiva

PowerPoint

Proyecto

Visio

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

Perspectiva

PowerPoint

Palabra
FormRegionStartup Implemente esta interfaz para crear un área de formulario de Outlook. Perspectiva

Hay otras interfaces de extensibilidad definidas por Microsoft Office, como IBlogExtensibility, EncryptionProvidery SignatureProvider. Visual Studio no admite la implementación de estas interfaces en un complemento de VSTO creado mediante las plantillas de proyecto de Office.

Uso de interfaces de extensibilidad

Para personalizar una característica de interfaz de usuario mediante una interfaz de extensibilidad, implemente la interfaz adecuada en el proyecto de complemento de VSTO. A continuación, invalide el RequestService método para devolver una instancia de la clase que implementa la interfaz .

Para obtener una aplicación de ejemplo que muestre cómo implementar las interfaces IRibbonExtensibility, ICustomTaskPaneConsumer y FormRegionStartup en un complemento de VSTO para Outlook, consulte el ejemplo del Administrador de la interfaz de usuario en ejemplos de desarrollo de Office.

Ejemplo de implementación de una interfaz de extensibilidad

En el ejemplo de código siguiente se muestra una implementación sencilla de la ICustomTaskPaneConsumer interfaz para crear un panel de tareas personalizado. En este ejemplo se definen dos clases:

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

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

    Nota:

    Para exponer la TaskPaneUI clase a COM, también debe establecer la propiedad Register for COM Interop 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

En el ejemplo de código siguiente se muestra cómo invalidar el RequestService método para devolver una instancia de la TaskPaneHelper clase del ejemplo de código anterior. Comprueba el valor del parámetro serviceGuid para determinar qué interfaz se solicita y, a continuación, 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);
}