我想为WPF使用文件夹浏览对话框,但是对于WPF
来说似乎不是必需的类。
有些人建议使用System.Windows.Forms.FolderBrowserDialog
,但这是一个非常糟糕的对话框。
我尝试了ookii.dialogs.wpf.vistafolderbrowserdialog:
Ookii.Dialogs.Wpf.VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
dlg.SelectedPath = path;
dlg.ShowDialog();
但是,设置SelectedPath
不会在对话框打开时设置启动文件夹,这对于我的程序至关重要。
如何让VistaFolderBrowserDialog
在正确的文件夹中打开?
我不能再现。但是也许这里只是有些困惑。如果我这样做:
var dialog = new VistaFolderBrowserDialog();
dialog.SelectedPath = @"C:Data";
dialog.ShowDialog();
它将在" C:"选择"文件夹"数据"中启动。按OK时,结果为" C: Data"。但是,包括最后的后斜线:
var dialog = new VistaFolderBrowserDialog();
dialog.SelectedPath = @"C:Data";
dialog.ShowDialog();
将在此精确文件夹中启动对话框,默认情况下什么都不选择。按下"确定"时,结果再次为" c: data"。
我最终使用CodePlex Project WPF本机文件夹浏览器:
WPFFolderBrowser.WPFFolderBrowserDialog dlg = new WPFFolderBrowserDialog();
dlg.InitialDirectory = path;
bool? pathWasSelected = dlg.ShowDialog();
string selectedPath = null;
if(pathWasSelected == true)
selectedPath = dlg.FileName;
wpffolderbrowser.wpffolderbrowserdialog-这是最适合我的!
我做了一个修复:函数errorhelper.hresultfromwin32(int)在按"选择文件夹"或" cancel"时生成system.OverFlowException(在.NET 4.5.1中运行)。
要修复,我将有问题的代码放在未检查的块中:
unchecked
{
win32ErrorCode =
(int)((win32ErrorCode & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000);
}
mcneight/wpffolderbrowser