简体   繁体   中英

WPF folder browser dialog that shows external devices and can navigate to user-given folder path

I have a WPF application where the user must choose a folder for an operation. I achieve this by opening a folder browser dialog when he clicks a button.

I want the dialog to both list external devices, like connected smartphones, and have a textbox where the user can enter a path to a folder and the dialog will be able to navigate to it, like the regular Windows dialogs work.

Currently I have:

    FolderItem ShellBrowseForFolder()
    {
        Folder folder = shell.BrowseForFolder(Hwnd, "", 0, 0);
        if (folder != null)
        {
            FolderItem fi = (folder as Folder3).Self;
            return fi;
        }

        return null;
    }

which I invoke by:

TargetFolderPath = ShellBrowseForFolder()?.Path;

This produces a folder browser dialog that looks like this:

Shell 文件夹浏览器对话框

This dialog lists external devices but the user can't just type in "C:\\some dir" and have the dialog navigate to it.

I've also tried providing options for the IShellDispatch.BrowseForFolder method (in accordance with these listed variants , after reading the MSDN article ) like so:

Folder folder = shell.BrowseForFolder(Hwnd, "", 4, 0);

and

Folder folder = shell.BrowseForFolder(Hwnd, "", 0x00000004, 0);

but I haven't noticed anything changing.

The other dialog I have is:

readonly System.Windows.Forms.FolderBrowserDialog folderBrowser = new();

if (folderBrowser.ShowDialog() == DialogResult.OK)
    folderPath = folderBrowser.SelectedPath;

This produces dis:

System.Windows.Forms 文件夹浏览器对话框

where the user CAN enter a path to a folder BUT this dialog does not show external devices, like connected smartphones.

Is there a way to get the best of both worlds?

You could try Ookii.Dialogs . Ookii.Dialogs.VistaFolderBrowserDialog should do what you want.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM