我开发了一个WPF4应用程序,在我的应用程序中,我需要让用户选择一个文件夹,应用程序将在其中存储一些东西(文件、生成的报告等)。
我的要求:
据我所知,直到2010年(.Net 4.0)才会有一个标准的文件夹对话框,但也许在4.0版本中会有一些变化?
或者我唯一能做的就是用一个老式的WinForms
对话框?如果这是我所需要的唯一方法,我如何使它看起来更接近Vista/7风格而不是Win9x?
发布于 2020-12-08 14:02:17
FolderBrowserDialog
类是System.Windows.Forms
中推荐的显示对话框的方法,该对话框允许用户选择文件夹。
直到最近,这个对话框的外观和行为还与其他文件系统对话框不一致,这也是人们不愿意使用它的原因之一。
好消息是FolderBrowserDialog
NET 3.0中的“现代化”,对于那些针对该版本或更高版本编写Windows或WPF应用程序的人来说,这也是一个可行的选择。
在WindowsCore3.0中,Windows用户使用Windows中引入的一种新的基于COM的控件:
对于在应用程序中,必须编辑项目文件并添加以下行:
<UseWindowsForms>true</UseWindowsForms>
这可以直接放在现有的<UseWPF>
元素之后。
那么这只是一个使用对话框的例子:
using System;
using System.Windows.Forms;
...
using var dialog = new FolderBrowserDialog
{
Description = "Time to select a folder",
UseDescriptionForTitle = true,
SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
+ Path.DirectorySeparatorChar,
ShowNewFolderButton = true
};
if (dialog.ShowDialog() == DialogResult.OK)
{
...
}
FolderBrowserDialog
有一个RootFolder
属性,据说它“设置了从这里开始浏览的根文件夹”,但是无论我将它设置为什么,它都没有任何区别;SelectedPath
似乎是用于这个目的的更好的属性,但是需要后面的反斜杠。
另外,ShowNewFolderButton
属性似乎也被忽略了,按钮总是被显示出来。
发布于 2010-10-24 15:18:01
我很久以前就在我的博客上写过,WPF对普通文件对话框的支持非常糟糕(或者至少是在3.5中,我没有签入第4版),但是很容易绕过它。
您需要向应用程序添加正确的清单,这将为您提供一个现代风格的消息框和文件夹浏览器(WinForms
,FolderBrowserDialog
),而不是打开/保存对话框的WPF文件,这将在这3篇文章中描述(如果您不关心解释,只希望解决方案直接转到第3页):
幸运的是,打开/保存对话框是Win32 API的非常薄的包装器,很容易用正确的标志调用以获得Vista/7样式(在设置清单之后)。
发布于 2016-07-23 13:53:33
将Windows API代码包-Shell添加到项目中
using Microsoft.WindowsAPICodePack.Dialogs;
...
var dialog = new CommonOpenFileDialog();
dialog.IsFolderPicker = true;
CommonFileDialogResult result = dialog.ShowDialog();
https://stackoverflow.com/questions/4007882
复制相似问题