C# VistaFolderBrowserDialog没有以正确的文件夹启动

C# VistaFolderBrowserDialog没有以正确的文件夹启动,c#,wpf,folderbrowserdialog,C#,Wpf,Folderbrowserdialog,我想为WPF使用文件夹浏览对话框,但是对于WPF,似乎没有这样一个基本的类 有些人建议使用System.Windows.Forms.FolderBrowserDialog,但这是一个非常糟糕的对话框 我试过: 但是设置SelectedPath不会在对话框打开时设置开始文件夹,这对于我的程序来说是必不可少的 如何使VistaFolderBrowserDialog在正确的文件夹中打开?我无法复制该对话框。但也许这里有一些混乱。如果我这样做: var dialog = new Vist

我想为WPF使用文件夹浏览对话框,但是对于
WPF
,似乎没有这样一个基本的类

有些人建议使用
System.Windows.Forms.FolderBrowserDialog
,但这是一个非常糟糕的对话框

我试过:

但是设置
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项目:


wpfolderbrowser.wpfolderbrowser对话框-这是最适合我的

不过我做了一个修正: 按“选择文件夹”或“取消”(在.NET 4.5.1中运行)时,函数ErrorHelper.HResultFromWin32(int)生成System.OverflowException

为了解决这个问题,我将有问题的代码放在unchecked块中:

unchecked
{
  win32ErrorCode =
      (int)((win32ErrorCode & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000);
}
未选中
{
Win32错误代码=

(int)(win32ErrorCode&0x0000FFFF)|(FACILITY_WIN32谢谢!这非常有帮助。Ookii对话框在引用问题上给我带来了很多麻烦。WPF的dll插入得很好,我认为微软自90年代以来没有改变System.Windows.Forms.FolderBrowserDialog中的任何内容……真是太棒了。
WPFFolderBrowser.WPFFolderBrowserDialog dlg = new WPFFolderBrowserDialog();
dlg.InitialDirectory = path;
bool? pathWasSelected = dlg.ShowDialog();
string selectedPath = null;
if(pathWasSelected == true) 
    selectedPath = dlg.FileName;
unchecked
{
  win32ErrorCode =
      (int)((win32ErrorCode & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000);
}