CommonOpenFileDialog无InitialDirectory和Multiselect定义问题求助
问题原因
你遇到的属性不可用问题,是因为微软官方的Windows API Code Pack早已停止维护,现在NuGet上的Microsoft.WindowsAPICodePack-Shell都是社区fork维护的第三方版本,不同维护者的版本会修改属性命名、可用成员,和早年的旧教程接口不匹配。
对应版本文档查询渠道
- 查看所安装NuGet包的项目主页:在NuGet包管理器中定位到你安装的
Microsoft.WindowsAPICodePack-Shell包,右侧详情页的项目URL一般指向对应的GitHub仓库,仓库内的README、Wiki、示例代码就是对应版本的官方使用文档,接口差异以你所用版本的仓库说明为准。 - 查看类定义:在IDE中将光标放在
CommonOpenFileDialog类名上,按F12跳转到类定义,可直接查看当前版本所有公开的属性、方法、枚举值,核对你调用的成员名是否和当前版本匹配,比如部分版本IsFolderPicker改名为FolderPicker,Multiselect改名为AllowMultiSelect。 - 参考Win32通用对话框官方文档:
CommonOpenFileDialog本质是对Windows系统原生通用文件对话框的封装,微软官方的Win32通用对话框文档可以帮你理解底层功能逻辑,快速对应不同封装版本的接口差异。
兼容版示例代码(适配绝大多数社区维护版本)
private void Button_Click(object sender, RoutedEventArgs e) { CommonOpenFileDialog dialog = new CommonOpenFileDialog("选择文件夹"); dialog.InitialDirectory = @"C:\Users"; // 若提示IsFolderPicker不存在则替换为 dialog.FolderPicker = true; dialog.IsFolderPicker = true; // 若提示Multiselect不存在则替换为 dialog.AllowMultipleSelection = true; dialog.Multiselect = true; if (dialog.ShowDialog() == CommonFileDialogResult.Ok) { // 多选场景使用FileNames集合获取所有选中路径 MessageBox.Show("你选中了: " + string.Join(",", dialog.FileNames)); } }
内容的提问来源于stack exchange,提问作者Croissant
相关产品推荐
相关产品推荐

