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

Posted

技术标签:

【中文标题】如何为 >= Vista 自定义 FileOpen 对话框?【英文标题】:How do I customize the FileOpen dialog for >= Vista? 【发布时间】:2013-01-29 06:15:26 【问题描述】:

我希望使用自定义 WinForms 和 WPF 控件自定义类似于 Vista 的 OpenFileDialog。我知道您可以模板化XP-like OpenFileDialog,但这看起来很丑陋并且不能满足我的要求。我知道您可以使用Ookii 对话框或Microsoft's API Code Pack 自定义OpenFileDialog。这种方法的问题是它们不允许自定义控件,只允许有限的控件子集(LabelTextBox 等)。

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

这种方法的问题是我必须在 WndProc 中禁用重新调整大小,因为 CommonOpenFileDialog 中的控件部分具有流/换行布局,并且您无法在重新调整大小时动态添加/删除控件或如果 OpenFileDialog 已经显示,您将遇到灾难性的失败。

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

[

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

[

【问题讨论】:

IFileDialogCustomize 支持大量的装饰物。但它不是无限可扩展的,并且您没有您可能正在寻找的灵活性。也不可能使用全新的东西。您无能为力,只能满足于支持的内容。 为什么您要尝试“自定义 FileOpen 对话框”?你的“自定义控件”会做什么? @DourHighArch - 我想添加一个缩略图幻灯片,如第一张图片所示,但用于自定义文件类型。工具提示中需要包含其他数据。用户还可以选择定义一些影响缩略图呈现方式的配置参数。这不仅仅是为文件类型设置 IPreviewHandler 的问题。 为什么不从头开始设计对话框? 这家伙创建了一个树视图目录。 youtube.com/… 它可以给你一些提示来创建你自己的 OpenFileDialog。 【参考方案1】:

使用 WPF 和 XAML 可以轻松地从头开始编写这类事情。如有必要,有您想要的简单子组件的控件。

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

【讨论】:

@Paul_Sumpner:提供一些示例代码会很有帮助,不是吗?

以上是关于如何为 >= Vista 自定义 FileOpen 对话框?的主要内容,如果未能解决你的问题,请参考以下文章

如何为反应表 7 提供自定义排序功能?

如何为自定义控件创建事件

如何为自定义 XML 格式定义类结构

如何为 WCF 指定自定义 SoapAction

如何为自定义结构中定义的无序集编写自定义哈希函数?

如何为 github.io 网站获取自定义不和谐嵌入?