WPF C#中的FolderBrowserDialog

4

我正在使用 System.Windows;System.Windows.Controls;,因此无法使用 System.Windows.Forms;,因为诸如消息框和列表框等许多控件在它们之间是共同的...等等,是否有其他解决方法可以获得文件夹浏览对话框而不使用 System.Windows.Forms; 或者是否有任何获取文件夹位置对话框的方法?

3个回答

5
您可以使用 FolderBrowserDialog,可以将命名空间显式地放在类的前面...
System.Windows.Forms.FolderBrowserDialog browse = new System.Windows.Forms.FolderBrowserDialog();

...或者创建别名以便更好地管理您的命名空间。

Imports [ aliasname = ] namespace

我在 browse.ShowDialog() 中遇到了这个异常,异常信息是:当前线程必须设置为单线程单元 (STA) 模式,才能进行 OLE 调用。请确保您的 Main 函数上标记了 STAThreadAttribute。只有在进程附加了调试器时才会引发此异常。 - kartal
@salamonti 看起来你已经把所有东西都搞定了;既然你接受了这个答案,如果你还需要帮助,请告诉我。 - Aaron McIver
不确定为什么,但是你上面的代码有FolderDialoespaceg(); 应该是new System.Windows.Forms.FolderBrowserDialog(); - Victor Chelaru
1
这种方法的主要问题在于它引入了对System.Windows.Forms程序集的引用需求,这会不经意地引导其他开发人员开始使用WinForms功能,例如MessageBox等。 - jpierson
@jpierson是正确的, 在WPF项目中使用WinForms真的不好。 - florien

5

我在使用WPF和listBox时也遇到了这个问题。

因为我们使用WPF,需要添加winform组件“FolderBrowserDialog”。

  • 右键单击项目名称或引用,选择“添加引用”
  • 选择“.Net”选项卡并浏览System.Windows.Forms

现在您可以在WPF中使用FolderBrowserDialog。

private FolderBrowserDialog openFolder = new FolderBrowserDialog();

这里是一个链接,链接到我的博客文章,其中包括图像和简短的说明 http://syumulnetwork.blogspot.com/2011/09/myth-self-note-5-c-wpf.html


2

似乎这是互联网上唯一一个提出在WPF项目中不包含WinForms的解决方案。你可能需要更新你的答案,包括一些使用方式,比如: 使用(Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog dbd = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog() { IsFolderPicker = true }) - florien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接