Personalizzare le funzionalità dell'interfaccia utente usando interfacce di estendibilità
Gli strumenti di sviluppo di Office in Visual Studio forniscono classi e finestre di progettazione che gestiscono molti dettagli di implementazione quando vengono usate per creare riquadri attività personalizzati, personalizzazioni della barra multifunzione e aree del modulo di Outlook in un componente aggiuntivo VSTO. Tuttavia, se sono necessari requisiti speciali è anche possibile implementare l'interfaccia di estendibilità per ogni funzionalità.
Si applica a: le informazioni contenute in questo argomento si applicano ai progetti di componente aggiuntivo VSTO. Per altre informazioni, vedere Funzionalità disponibili per app Office lication e tipo di progetto.
Microsoft Office definisce un set di interfacce di estendibilità che possono essere implementate nei componenti aggiuntivi VSTO COM per personalizzare determinate funzionalità, ad esempio la barra multifunzione. Queste interfacce forniscono il controllo completo sulle funzionalità alle quali forniscono l'accesso. Tuttavia, l'implementazione di queste interfacce richiede una certa conoscenza dell'interoperabilità COM nel codice gestito. In alcuni casi, il modello di programmazione di queste interfacce non è intuitivo neppure per gli sviluppatori abituati a .NET Framework.
Quando si crea un componente aggiuntivo VSTO usando i modelli di progetto di Office in Visual Studio, non è necessario implementare interfacce di estendibilità per personalizzare funzionalità come la barra multifunzione. Il runtime di Strumenti di Visual Studio per Office implementa queste interfacce. Al contrario, è possibile usare classi e finestre di progettazione più intuitive fornite da Visual Studio. Tuttavia, è anche possibile implementare le interfacce di estendibilità direttamente nel componente aggiuntivo VSTO.
Per altre informazioni sulle classi e le finestre di progettazione fornite da Visual Studio per queste funzionalità, vedere Riquadri attività personalizzati, Progettazione barra multifunzione e Creare aree del modulo di Outlook.
Interfacce di estendibilità che è possibile implementare in un componente aggiuntivo VSTO
La tabella seguente elenca le interfacce di estendibilità implementabili e le applicazioni che le supportano.
Interfaccia | Descrizione | Applicazioni |
---|---|---|
IRibbonExtensibility | Implementare questa interfaccia per personalizzare l'interfaccia utente della barra multifunzione. Nota: è possibile aggiungere un elemento della barra multifunzione (XML) a un progetto per generare un'implementazione predefinita IRibbonExtensibility nel componente aggiuntivo VSTO. Per altre informazioni, vedere Ribbon XML. | Excel InfoPath 2013 InfoPath 2010 Outlook PowerPoint Project Visio Word |
ICustomTaskPaneConsumer | Implementare questa interfaccia per creare un riquadro attività personalizzato. | Excel Outlook PowerPoint Word |
FormRegionStartup | Implementare questa interfaccia per creare un'area di modulo Outlook. | Outlook |
Esistono diverse altre interfacce di estendibilità definite dalle applicazioni di Microsoft Office, ad esempio IBlogExtensibility, EncryptionProvidere SignatureProvider. In Visual Studio l'implementazione di queste interfacce in un componente aggiuntivo VSTO creato usando i modelli di progetto di Office non è supportata.
Usare le interfacce di estendibilità
Per personalizzare una funzionalità dell'interfaccia utente usando un'interfaccia di estendibilità, implementare l'interfaccia appropriata nel progetto del componente aggiuntivo VSTO. Eseguire quindi l'override del metodo RequestService in modo da ottenere un'istanza della classe che implementi l'interfaccia.
Per un'applicazione di esempio che illustra come implementare le IRibbonExtensibilityinterfacce , ICustomTaskPaneConsumere FormRegionStartup in un componente aggiuntivo VSTO per Outlook, vedere l'esempio di Ui Manager negli esempi di sviluppo di Office.
Esempio di implementazione di un'interfaccia di estendibilità
Nell'esempio di codice riportato di seguito viene illustrata l'implementazione dell'interfaccia ICustomTaskPaneConsumer per creare un riquadro attività personalizzato. Nell'esempio vengono definite due classi:
La classe
TaskPaneHelper
implementa ICustomTaskPaneConsumer per creare e visualizzare un riquadro attività personalizzato.La classe
TaskPaneUI
fornisce l'interfaccia utente del riquadro attività. Gli attributi della classeTaskPaneUI
rendono la classe visibile a COM, permettendo alle applicazioni di Microsoft Office di individuare la classe. In questo esempio, UserControlè un'interfaccia utente vuota, ma è possibile aggiungere i controlli modificando il codice.Nota
Per esporre la classe
TaskPaneUI
a COM è necessario impostare anche la proprietà Registra per interoperabilità COM per il progetto.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 { }
Per altre informazioni sull'implementazione ICustomTaskPaneConsumerdi , vedere Creare riquadri attività personalizzati in Office System 2007 nella documentazione di Microsoft Office.
Esempio di override del metodo RequestService
L'esempio di codice seguente illustra come eseguire l'override del metodo RequestService per ottenere un'istanza della classe TaskPaneHelper
dall'esempio di codice precedente. Viene verificato il valore del parametro serviceGuid per determinare l'interfaccia necessaria e quindi viene restituito un oggetto che implementa l'interfaccia.
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);
}