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

我的要求:

  • 能够查看标准文件夹树

  • Select 文件夹的能力

  • 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相关问答推荐

.NET Blazor-使用子组件中的处理程序方法进行双向数据绑定

避免函数和其他对象之间的相互递归的模式?

Puppeteer LaunchAsync 在未打开浏览器的情况下挂起

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

SetupSet() 已过时.代替什么?

XmlNode 值与内部文本

为什么要判断这个!= null?

我什么时候应该在 C# 中使用使用块?

在 C# 中转义命令行参数

C# 编译为 32/64 位,或任何 cpu?

ASP.NET Core (.NET Core) 和 ASP.NET Core (.NET Framework) 的区别

如何将 System.Type 转换为其可为空的版本?

微软内部 PriorityQueue 中的错误?

使用语句与最终try

在 .NET Core 中在 MVC 之外使用 Razor

通过反射查找可空属性的类型

无锁多线程适用于真正的线程专家

读取 XML(从字符串)并获取一些字段 - 读取 XML 时出现问题

如何将 VB 项目转换为 C# 项目

在 try/catch/finally 中等待的一个很好的解决方案?