如何在WPF项目中使用FolderBrowserDialog实现文件夹选择功能
WPF 文件夹选择功能实现方案
方案1:使用Ookii.Dialogs.Wpf(推荐,原生WPF风格)
你当前的问题是混用了WinForm的对话框API和Ookii类库,Ookii有独立的调用逻辑,不需要依赖WinForm程序集,完整实现代码如下:
private void btnRadarFolder_Click(object sender, RoutedEventArgs e) { // 直接使用Ookii提供的WPF原生文件夹对话框 var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog(); // 可自定义配置对话框描述、默认打开路径等属性 dialog.Description = "请选择雷达数据存储文件夹"; dialog.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // ShowDialog返回可空布尔值,为true时代表用户点击了确认按钮 if (dialog.ShowDialog() == true) { // 选中的文件夹路径直接从SelectedPath属性获取 string selectedFolder = dialog.SelectedPath; // 后续业务逻辑写在这里,比如给路径文本框赋值 // txtRadarFolderPath.Text = selectedFolder; } }
- 该实现打开的是系统原生的新版文件夹选择对话框,兼容Vista及以上系统,不会出现旧风格界面
- 不需要引用任何WinForm相关程序集,不会出现类型冲突
方案2:继续使用WinForm的FolderBrowserDialog
如果你坚持使用旧版风格的对话框,需要先在项目中添加System.Windows.Forms程序集引用,完整代码如下:
private void btnRadarFolder_Click(object sender, RoutedEventArgs e) { using (var dialog = new System.Windows.Forms.FolderBrowserDialog()) { dialog.Description = "请选择雷达数据存储文件夹"; System.Windows.Forms.DialogResult result = dialog.ShowDialog(); // 直接匹配WinForm的DialogResult.OK枚举即可完成判断 if (result == System.Windows.Forms.DialogResult.OK) { string selectedFolder = dialog.SelectedPath; // 后续业务逻辑写在这里 } } }
- 该方案需要处理WPF和WinForm的类型冲突,仅当你必须兼容XP系统时使用
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

