You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VSTO加载项中显示WPF窗口?VBA迁移VSTO窗体初始化问题

解决VSTO Excel加载项中Windows窗体缺失及WPF窗口显示问题

一、为什么VS2017中找不到Windows窗体选项?

VSTO Excel加载项项目默认可能没启用Windows Forms相关模板,或者你的VS2017安装时遗漏了.NET桌面开发组件。可以按以下步骤解决:

  • 打开VS2017的工具 -> 获取工具和功能,确认已勾选**.NET桌面开发**工作负载(该负载包含Windows Forms和WPF开发工具)。
  • 若组件已安装,在添加新项时切换到Visual Basic -> Windows Forms类别,就能找到“Windows窗体”模板;如果仍未显示,可尝试手动创建:添加一个“类”文件,让它继承System.Windows.Forms.Form,再手动编写窗体相关逻辑(不过更推荐先确保组件安装完整)。

二、初始化并显示WPF窗口的步骤

既然你已经用XAML创建了WPF窗口,只需完成实例化和显示的操作,具体如下:

1. 导入必要的命名空间

在调用WPF窗口的代码文件中,添加WPF相关的命名空间:

Imports System.Windows

2. 实例化并显示窗口

你可以在加载项启动时显示窗口,也可以绑定到自定义Ribbon按钮的点击事件中。举两个常用场景的示例:

场景1:加载项启动时显示窗口

在ThisAddIn.vb的Startup事件中添加代码:

Private Sub ThisAddIn_Startup(sender As Object, e As EventArgs) Handles Me.Startup
    ' 替换成你的WPF窗口类名
    Dim myWpfWindow As New MyCustomWpfWindow()
    ' 非模态显示窗口(不阻塞Excel操作)
    myWpfWindow.Show()
    ' 如果需要模态窗口(阻塞Excel操作直到窗口关闭),改用:
    ' myWpfWindow.ShowDialog()
End Sub

场景2:自定义按钮点击时显示窗口

在Ribbon按钮的点击事件中添加代码:

Private Sub ShowWpfWindowButton_Click(sender As Object, e As RibbonControlEventArgs) Handles ShowWpfWindowButton.Click
    Dim myWpfWindow As New MyCustomWpfWindow()
    myWpfWindow.Show()
End Sub

注意事项

  • 确保你的WPF窗口类的访问修饰符是Public,否则在其他类中无法实例化。
  • VSTO加载项默认运行在STA线程中,WPF窗口天然支持STA线程,一般无需额外处理;如果遇到线程相关错误,可尝试通过Dispatcher调用:
Application.Current.Dispatcher.Invoke(Sub()
                                          Dim myWpfWindow As New MyCustomWpfWindow()
                                          myWpfWindow.Show()
                                      End Sub)

三、补充:如何添加标准WPF窗口?

如果你的VS2017里找不到WPF窗口模板,按以下步骤操作:

  1. 右键项目 -> 添加 -> 新建项
  2. 在左侧导航栏选择Visual Basic -> WPF
  3. 选中“WPF窗口”模板,命名后点击添加即可(这样创建的是完整窗口,而非User Control)。

内容的提问来源于stack exchange,提问作者Raghu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:38:08