在 VSTO 解决方案中使用 WPF 控件(Visual Basic 2008)






4.33/5 (4投票s)
解释如何在 Visual Studio Tools for Office 解决方案中添加 WPF 控件,并编写 Visual Basic 代码。

引言
Visual Studio 2008 Tools for Office System 允许将 Windows Forms 控件拖放到 Office 文档的表面,以创建高级用户体验。
也可以使用 WPF 控件,但这需要更多步骤,因为 Office 应用程序不能直接托管 WPF 控件。因此,我们必须使用这两种技术之间的互操作性。
在本文中,我将向您展示如何创建一个自定义 Windows Forms 控件来托管 WPF 控件,这些控件可以拖放到 Office 2007 文档的表面。
背景
在阅读本文之前,您应该对 WPF 控件和 .NET 用户控件非常熟练。
Using the Code
打开 Visual Studio 2008 并为 Microsoft Excel 2007 创建一个新的 Visual Basic 2008 文档级别解决方案。
第一步是将一个新的自定义 Windows Forms 控件添加到解决方案中。添加后,将其重命名为 HostUserControl.vb。然后,从 Visual Studio 2008 工具箱中的 WPF 互操作性选项卡中,将一个 ElementHost
项拖动到用户控件表面。将 ElementHost
的 Dock
属性设置为 Fill
。
完成此操作后,添加对以下 WPF 程序集的引用:
- WindowsBase.dll
- PresentationCore.dll
- PresentationFramework.dll
此时,我们可以开始实现一个 WPF 控件,通过编写托管代码(在这种情况下,我们显然不能通过 XAML 来完成)。例如,我们可以将一个 Expander
控件添加到我们的用户控件中,该控件由 WPF 中的 System.Windows.Controls 命名空间
提供。选择用户控件并切换到代码编辑器,然后输入以下代码:
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 = " WPF control 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
现在编译解决方案,以便工具箱使用新的用户控件进行更新。切换到设计模式,并将新的 HostUserControl
拖动到 Excel 2007 工作表中。 上图显示了结果。
设计完控件后,可以像使用其他控件一样编写代码来处理其事件。
关注点
如您所见,在 VSTO 解决方案中使用 WPF 控件是一个非常简单的过程,即使无法使用 XAML 来管理控件 UI。 无论如何,您也可以通过编写托管代码获得惊人的结果。
历史
- 2008 年 3 月 9 日:初始发布