Visual Studio中如何为WPF项目添加Windows.Forms框架引用
WPF项目无法识别System.Windows.Forms命名空间的解决方法
问题原因
找不到Windows.Forms引用、添加了截图中选项也无法识别using System.Windows.Forms;的核心原因有两个:
- 网上多数旧教程针对的是.NET Framework版本的WPF项目,而现在Visual Studio默认创建的是.NET Core/.NET 5+的现代WPF项目,两者添加Windows Forms引用的逻辑完全不同
- 你截图里勾选的
WindowsFormsIntegration是WPF嵌入WinForms控件用的互操作库,本身不包含System.Windows.Forms命名空间的相关类,加了也没法正常调用FolderBrowserDialog组件
分场景解决步骤
场景1:使用.NET Core 3.0+/.NET 5/6/7/8 现代.NET版本WPF(VS默认新建的WPF项目均为该类型)
不需要在引用管理器里手动找dll,按以下操作即可:
- 右键解决方案资源管理器中的项目名,选择「编辑项目文件」
- 在打开的csproj文件的
<PropertyGroup>节点中,添加一行配置:
<UseWindowsForms>true</UseWindowsForms>
- 保存文件后Visual Studio会自动完成引用还原,之后直接编写
using System.Windows.Forms;就能正常识别,不需要额外操作。
场景2:使用.NET Framework版本的WPF项目
- 打开引用管理器,左侧选择「程序集-框架」,在右侧列表下拉找到
System.Windows.Forms,勾选后点击确定即可 - 如果列表中找不到,就点击引用管理器右下角的「浏览」,手动定位到路径
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Windows.Forms.dll,选中添加即可。
文件夹选择对话框调用示例
引用添加完成后,可直接用以下代码唤起文件夹选择框:
using System.Windows.Forms; // 在按钮点击等交互事件中编写以下逻辑 var folderDialog = new FolderBrowserDialog { Description = "请选择需要操作的文件夹", ShowNewFolderButton = true // 控制是否允许用户在对话框中新建文件夹 }; // 显示对话框,判断用户是否点击了确定按钮 if (folderDialog.ShowDialog() == DialogResult.OK) { string selectedPath = folderDialog.SelectedPath; // 此处编写拿到路径后的业务逻辑 }
更适配WPF的无依赖方案(可选)
如果不想引入WinForms的整套依赖,高版本WPF可以选择更原生的实现方式:
- 方案1:通过NuGet安装
Microsoft.WindowsAPICodePack-Shell包,用CommonOpenFileDialog实现文件夹选择,完全适配WPF的样式和交互逻辑 - 方案2:.NET 8及以上版本WPF已经内置原生
OpenFolderDialog组件,不需要引用任何额外库,直接在Microsoft.Win32命名空间下调用即可。
注意:所有对话框调用都要在WPF的UI主线程(STA线程)执行,默认创建的WPF项目已经满足该要求,不要在自行创建的MTA后台线程里直接弹出对话框,会触发线程兼容性错误。
内容的提问来源于stack exchange,提问作者miguello
相关产品推荐
相关产品推荐

