如何自定义 >= Vista 的 FileOpen 对话框?

How do I customize the FileOpen dialog for >= Vista?

提问人:Brian Mullen 提问时间:2/14/2013 最后编辑:C. Augusto ProieteBrian Mullen 更新时间:7/18/2023 访问量:1563

问:

我希望使用自定义 WinForms 和 WPF 控件自定义类似 Vista 的内容。我知道您可以对类似 XP 的 OpenFileDialog 进行模板化,但这看起来很丑陋,不能满足我的要求。我知道您可以使用 Ookii 对话框或从 Microsoft 的 API 代码包自定义。这种方法的问题在于它们不允许自定义控件,只允许有限的控件子集(、等)。OpenFileDialogOpenFileDialogLabelTextBox

我得到的最接近的是下图。结合使用 API 代码包、对 Shell 的一些更改、为间距添加空标签的黑客工作,以及一堆丑陋的 COM 直接在 OpenFileDialog 上绘制控件,我能够接近。

这种方法的问题在于,我必须在 WndProc 中禁用调整大小,因为 中的控件部分具有流/换行布局,并且您无法在调整大小时动态添加/删除控件,否则如果 OpenFileDialog 已经显示,则会出现灾难性故障。CommonOpenFileDialog

除了我尝试过的或任何第三方产品之外,是否有任何建议可以作为标准的类似 Vista 的 OpenFileDialog 工作,但允许插入自定义控件?

[

我还尝试使用 API 代码包中的 ExplorerBrowser(如下图所示)滚动自己的浏览器,但尽管梳理了 COM API,但似乎没有办法在 ExplorerBrowser 中定义过滤器。

[

.NET WPF WinForms Windows-7 OpenFileDialog

评论

0赞 Hans Passant 2/14/2013
IFileDialogCustomize 支持大量 doodah。但它不是无限可扩展的,你没有你可能正在寻找的灵活性。也不可能附加一些全新的东西。您无能为力,只能满足于所支持的内容。
0赞 Dour High Arch 2/14/2013
为什么要尝试“自定义 FileOpen 对话框”?您的“自定义控件”将做什么?
0赞 Brian Mullen 2/14/2013
@DourHighArch - 我想添加一个缩略图胶片,如第一张图片所示,但用于自定义文件类型。工具提示中需要包含其他数据。用户还可以选择定义一些配置参数,这些参数会影响缩略图的呈现方式。这不仅仅是为文件类型设置 IPreviewHandler 的问题。
12赞 Mathieu Guindon 3/14/2013
为什么不从头开始设计对话框呢?
0赞 Mr. Leeds 6/28/2018
这家伙创建了一个树视图目录。youtube.com/......它可以为您提供一些提示来创建自己的 OpenFileDialog。

答:

0赞 Paul Sumpner 10/8/2019 #1

这种事情可以很容易地使用 WPF 和 XAML 从头开始编写。如有必要,可以使用所需的简单子组件的控件。

如果您尝试修改现有文件对话框,您将受到限制,并且以后可能会碰到砖墙。

评论

0赞 D J 4/6/2020
@Paul_Sumpner:提供一些示例代码会很有帮助,不是吗?
-1赞 user8259301 7/18/2023 #2

完全同意保罗·桑普纳(Paul Sumpner)的观点。如果 Ookii 对话框不适合,在我看来,唯一的其他选择就是从头开始构建自己的对话框。