首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择文件夹对话框WPF

选择文件夹对话框WPF
EN

Stack Overflow用户
提问于 2010-10-24 10:36:31
回答 11查看 172.5K关注 0票数 76

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

我的要求:

  • 查看标准文件夹树的能力
  • 选择文件夹的能力
  • WPF外观和感觉,这个对话框必须看起来像一个现代应用程序的一部分,为Windows /7,而不是Windows2000,甚至Win9x。

据我所知,直到2010年(.Net 4.0)才会有一个标准的文件夹对话框,但也许在4.0版本中会有一些变化?

或者我唯一能做的就是用一个老式的WinForms对话框?如果这是我所需要的唯一方法,我如何使它看起来更接近Vista/7风格而不是Win9x?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2020-12-08 14:02:17

FolderBrowserDialog类是System.Windows.Forms中推荐的显示对话框的方法,该对话框允许用户选择文件夹。

直到最近,这个对话框的外观和行为还与其他文件系统对话框不一致,这也是人们不愿意使用它的原因之一。

好消息是FolderBrowserDialog NET 3.0中的“现代化”,对于那些针对该版本或更高版本编写Windows或WPF应用程序的人来说,这也是一个可行的选择。

在WindowsCore3.0中,Windows用户使用Windows中引入的一种新的基于COM的控件:

对于在应用程序中,必须编辑项目文件并添加以下行:

代码语言:javascript
运行
复制
<UseWindowsForms>true</UseWindowsForms>

这可以直接放在现有的<UseWPF>元素之后。

那么这只是一个使用对话框的例子:

代码语言:javascript
运行
复制
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属性似乎也被忽略了,按钮总是被显示出来。

票数 9
EN

Stack Overflow用户

发布于 2010-10-24 15:18:01

我很久以前就在我的博客上写过,WPF对普通文件对话框的支持非常糟糕(或者至少是在3.5中,我没有签入第4版),但是很容易绕过它。

您需要向应用程序添加正确的清单,这将为您提供一个现代风格的消息框和文件夹浏览器(WinFormsFolderBrowserDialog),而不是打开/保存对话框的WPF文件,这将在这3篇文章中描述(如果您不关心解释,只希望解决方案直接转到第3页):

  • 为什么我要使用WPF获得老式的文件对话框和消息框
  • 设置一个报表会解决我的WPF消息框样式问题吗?
  • 使用WPF的XP和Vista样式文件对话框和消息框所需的应用程序说明

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

  • 使用WPF打开和保存对话框(不使用Vista桥示例)
票数 21
EN

Stack Overflow用户

发布于 2016-07-23 13:53:33

Windows API代码包-Shell添加到项目中

代码语言:javascript
运行
复制
using Microsoft.WindowsAPICodePack.Dialogs;

...

var dialog = new CommonOpenFileDialog();
dialog.IsFolderPicker = true;
CommonFileDialogResult result = dialog.ShowDialog();
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4007882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档