问题描述
我有一个 WPF 应用程序,用户必须在其中选择一个文件夹进行操作。我通过在他单击按钮时打开文件夹浏览器对话框来实现这一点。
我希望对话框既能列出外部设备,如连接的智能手机,也有一个文本框,用户可以在其中输入文件夹的路径,对话框将能够导航到它,就像常规的 Windows 对话框一样。
目前我有:
FolderItem ShellbrowseForFolder()
{
Folder folder = shell.browseForFolder(Hwnd,"",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:
用户可以在其中输入文件夹路径,但此对话框不显示外部设备,例如连接的智能手机。
有没有办法两全其美?
解决方法
你可以试试Ookii.Dialogs。 Ookii.Dialogs.VistaFolderBrowserDialog 应该做你想做的。