【发布时间】:2021-07-16 08:35:01
【问题描述】:
我有一个 WPF 应用程序,用户必须在其中选择一个文件夹进行操作。我通过在他单击按钮时打开文件夹浏览器对话框来实现这一点。
我希望对话框既能列出外部设备,如已连接的智能手机,又要有一个文本框,用户可以在其中输入文件夹的路径,并且对话框将能够导航到该文件夹,就像常规 Windows 对话框一样。
目前我有:
FolderItem ShellBrowseForFolder()
{
Folder folder = shell.BrowseForFolder(Hwnd, "", 0, 0);
if (folder != null)
{
FolderItem fi = (folder as Folder3).Self;
return fi;
}
return null;
}
我通过以下方式调用:
TargetFolderPath = ShellBrowseForFolder()?.Path;
这会产生一个如下所示的文件夹浏览器对话框:
此对话框列出了外部设备,但用户不能只输入“C:\some dir”并让对话框导航到它。
我也尝试过为IShellDispatch.BrowseForFolder 方法提供选项(根据these listed variants,在阅读the MSDN article 之后),如下所示:
Folder folder = shell.BrowseForFolder(Hwnd, "", 4, 0);
和
Folder folder = shell.BrowseForFolder(Hwnd, "", 0x00000004, 0);
但我没有注意到任何变化。
我的另一个对话框是:
readonly System.Windows.Forms.FolderBrowserDialog folderBrowser = new();
if (folderBrowser.ShowDialog() == DialogResult.OK)
folderPath = folderBrowser.SelectedPath;
这会产生dis:
用户可以在其中输入文件夹的路径,但此对话框不显示外部设备,例如连接的智能手机。
有没有办法两全其美?
【问题讨论】:
标签: c# wpf shell folderbrowserdialog