我开发了一个WPF4应用程序,在我的应用程序中,我需要让用户选择一个文件夹,应用程序将在其中存储一些东西(文件、生成的报告等).

我的要求:

  • 能够查看标准文件夹树

  • 选择文件夹的能力

  • WPF外观,此对话框必须看起来像是为Windows Vista/7设计的现代应用程序的一部分,而不是Windows 2000甚至Win9x.

据我所知,直到2010年(.NET4.0)才会有标准的文件夹对话框,但4.0版可能会有一些变化?

或者剩下的就是使用老式的WinForms对话框?如果这是实现我所需的唯一方法,我如何使它更接近Vista/7风格而不是Win9x?

在一些论坛上,我看到了这样的对话框的实现,但带有类似于Windows95的丑陋的老图标.它看起来真的不太好.

推荐答案

我很久以前就在我的博客上写过,WPF对公共文件对话框的支持真的很糟糕(或者至少是在3.5版本中我没有签入版本4)--但是很容易解决这个问题.

您需要向应用程序中添加正确的 list ,这将为您提供一个现代风格的消息框和文件夹浏览器(WinForms FolderBrowserDialog),但不提供WPF文件打开/保存对话框,这在这3篇文章中有描述(如果您不在乎解释,只想让解决方案直接转到第3篇):

幸运的是,打开/保存对话框是围绕Win32 API的非常薄的包装,很容易使用正确的标志调用,以获得Vista/7样式(在设置 list 之后)

.net相关问答推荐

信号量的多线程问题

如何知道变量是否只是指向另一个对象的“pointer”或者它是否可以独立存在

如何从 HashSet 中检索实际项目?

更新 .NET Web 服务以使用 TLS 1.2

EF Core 添加迁移构建失败

微软内部 PriorityQueue 中的错误?

.NET 标准与 .NET Core

我可以先使用 EF 代码和 .net 核心生成迁移脚本吗

.NET 4.5 中的默认安全协议

Resharper Ctrl-T 映射丢失

如何在 ASP.NET Core MVC 中读取操作方法的属性?

Visual Studio 2015 中的共享项目和类库有什么区别?

[DllImport("QCall")] 是什么?

String.Equals(a,b) 如何不产生 StackOverflowException?

你如何循环当前加载的程序集?

Dapper 是否支持 SQL 2008 表值参数?

程序集引用的“特定版本”属性在 Visual Studio 中究竟是如何工作的?

将 SignalR 2.0 .NET 客户端重新连接到服务器集线器的最佳实践

自创建数据库以来,支持“ApplicationDbContext”上下文的模型已更改

如何将 RestSharp 与 async/await 一起使用