我尝试使用WPF中的FolderBrowserDialog,如下所示:
public static bool BrowseFolder(out string folderName)
{
using (System.Windows.Forms.FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog())
{
var result = dlg.ShowDialog();
folderName = dlg.SelectedPath;
return result == System.Windows.Forms.DialogResult.OK;
}
}
在Visual Studio 2010中使用“break on exception”时,在ShowDialog()调用中关闭Dialog后会出现异常。我很好奇为什么会这样。
异常:Win32Exception
消息:参数不正确
Stacktrace:在MS.Win32.UnsafeNativeMethods.SetFocus(HandleRef hWnd)
更新
我还试图明确地设置父级,但仍然抛出了异常。
var w = new System.Windows.Interop.WindowInteropHelper(parent);
System.Windows.Forms.IWin32Window i = new WindowWrapper(w.Handle);
result = dlg.ShowDialog(i);
答案 0 :(得分:9)
这只是一点互操作性。当对话框关闭时,WPF代码尝试将焦点设置回主窗口。问题是,对话框已禁用窗口,因此它无法接收焦点。 WPF太急于改变焦点,并且对对话行为一无所知。什么都不会出错。
答案 1 :(得分:0)
我会尝试不使用“使用”语句来执行此操作,也许它会过快地清理。
答案 2 :(得分:-1)
我相信你需要一个Windows窗体主机来运行Windows.Forms命名空间中的任何东西......试一试!