In un precedente post abbiamo visto come, utilizzando Visual Basic 2008 e i Visual Studio Tools for Office, sia possibile utilizzare controlli Windows Forms nelle soluzioni a livello di documento per Word ed Excel 2007.
In realtà, è possibile utilizzare anche controlli Windows Presentation Foundation anche se questa tecnica richiede qualche passaggio in più, dal momento che le applicazioni di Office non sono in grado di ospitare direttamente questo tipo di controlli; bisogna, quindi, ricorrere all’interoperabilità tra le due tecnologie.
Ipotizzate di aver creato una soluzione Visual Basic 2008 per la gestione di un documento di Excel 2007. Il primo passaggio da realizzare è quello di creare un controllo utente Windows Forms, aggiungendolo alla soluzione. Dalla toolbox, trascinate sulla superficie del controllo un oggetto ElementHost e impostatene la proprietà Dock su Fill.
Fatto questo, aggiungete un riferimento ai seguenti assembly di WPF:
· WindowsBase.dll
· PresentationCore.dll
· PresentationFramework.dll
A questo punto si può passare ad implementare un controllo WPF utilizzando codice managed (non possiamo, ovviamente, farlo tramite XAML). Vogliamo, all’interno dell’user control, aggiungere un controllo Expander di WPF. Ipotizzando di aver rinominato il nostro user control in HostUserControl.vb, attivate l’editor di codice su di esso e digitate quanto segue:
Imports System.Windows.Controls
Imports System.Windows.Media
Public Class HostUserControl
Private Sub HostUserControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ex As New Expander
ex.Header = "Controllo WPF in Excel 2007"
ex.Background = New SolidColorBrush(Colors.LightBlue)
ex.BorderBrush = New SolidColorBrush(Colors.Black)
ex.BorderThickness = New Windows.Thickness(2)
Me.ElementHost1.Child = ex
End Sub
End Class
Ora compilate la soluzione, affinchè la toolbox venga aggiornata con il nostro user control. Attivate il designer su uno qualsiasi dei fogli di lavoro della cartella di Excel 2007 e trascinate su di esso il controllo appena aggiunto alla toolbox. La seguente figura mostra il risultato ottenuto:

Come potete osservare, l’utilizzo di controlli WPF nelle soluzioni VSTO è un procedimento dalla logica piuttosto semplice, sebbene non si potrà sfruttare la potenza di XAML per gestire l’interfaccia dei controlli. Tuttavia, la scrittura del corrispondente codice managed vi consentirà di ottenere ugualmente risultati sorprendenti.
Alessandro