我想为WPF使用文件夹浏览对话框,但WPF
似乎没有这样一个必要的类。
有人建议使用System.Windows.Forms.FolderBrowserDialog
,但这是一个非常糟糕的对话。
我尝试了Ookii.Dialogs.Wpf.VistaFolderBrowserDialog:
Ookii.Dialogs.Wpf.VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
dlg.SelectedPath = path;
dlg.ShowDialog();
但设置SelectedPath
时,对话框打开时不会设置启动文件夹,这对我的程序至关重要。
如何在正确的文件夹中打开VistaFolderBrowserDialog
?
答案 0 :(得分:5)
我无法重现这一点。但也许这里只有一些混乱。如果我这样做:
var dialog = new VistaFolderBrowserDialog();
dialog.SelectedPath = @"C:\Data";
dialog.ShowDialog();
它将在“C:”中启动并选择文件夹“数据”。按OK时,结果为“C:\ Data”。但是,包括最后的反斜杠:
var dialog = new VistaFolderBrowserDialog();
dialog.SelectedPath = @"C:\Data\";
dialog.ShowDialog();
将在此确切文件夹中启动对话框,默认情况下不选择任何内容。按“OK”时,结果再次为“C:\ Data”。
答案 1 :(得分:2)
我最终使用了Codeplex项目WPF Native Folder Browser:
WPFFolderBrowser.WPFFolderBrowserDialog dlg = new WPFFolderBrowserDialog();
dlg.InitialDirectory = path;
bool? pathWasSelected = dlg.ShowDialog();
string selectedPath = null;
if(pathWasSelected == true)
selectedPath = dlg.FileName;
答案 2 :(得分:0)
WpfFolderBrowser.WpfFolderBrowserDialog - 这是最适合我的那个!
我做了一个修复但是: 按下"选择文件夹"时,函数ErrorHelper.HResultFromWin32(int)会生成System.OverflowException。或"取消" (在.NET 4.5.1中运行)。
要修复,我将有问题的代码放在未经检查的块中:
unchecked
{
win32ErrorCode =
(int)((win32ErrorCode & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000);
}