.NET 8 中的 WPF File Dialog 改进

这篇具有很好参考价值的文章主要介绍了.NET 8 中的 WPF File Dialog 改进。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:Dipesh Kumar
排版:Alan Wang

我们很高兴宣布从 .NET 8 Preview 7 开始,对 WPF 中的通用文件对话框 API 进行了一系列新的改进。其中包括迄今为止存储库中投票最多的 API 建议 – 允许用户选择文件夹的 OpenFolderDialog 控件 – 以及文件对话框上支持新的用户场景的几个新属性,例如单独保存状态、限制文件夹导航等。

到目前为止,WPF 支持 Windows Vista 中引入的 Common Item Dialog API 以及在旧操作系统上运行时遗留的 GetOpenFileName 和 GetSaveFileName 函数。作为此更新的一部分,由于 .NET 支持的所有 Windows 版本都只使用较新的 API,因此对话框代码被清理,遗留函数的基础架构被删除。在兼容模式下运行的应用程序将继续工作,但它们将使用 Common Item Dialog API 来呈现通用对话框。

OpenFolderDialog

WPF 社区中用于选择文件夹的对话框是最受欢迎的功能之一。示例用例包括在 Visual Studio 或 Visual Studio Code 中打开文件夹、在 Outlook 中保存附件、将压缩文件解压到用户选择的文件夹中。到目前为止,开发人员必须使用 Windows Forms或依赖第三方库才能提供这种体验,这引入了不必要的依赖关系从而不适合现有的对话框模型。

从 .NET 8 开始,我们在 WPF 中提供了对此对话框的本机支持。社区中已经有很多关于如何将此功能集成到现有文件对话框模型中的讨论,试图平衡兼容性要求、简洁的架构设计和底层 API 结构。最终,我们决定在继承链中引入一个新的基类 CommonItemDialog,其中所有公共对话框属性都被移动:
.NET 8 中的 WPF File Dialog 改进,.net,c#,wpf
这使我们能够保持与现有应用程序的向后兼容。有关设计和讨论的更多详细信息您可以在请求和 API 提案中找到。

使用 OpenFolderDialog 类似于使用 WPF 中现有的文件对话框:

var folderDialog = new OpenFolderDialog
{
    Title = "Select Folder",
    InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
};

if (folderDialog.ShowDialog() == true)
{
    var folderName = folderDialog.FolderName;
    MessageBox.Show($"You picked ${folderName}!");
}

其中 ShowDialog 方法打开对话框并等待用户输入:
.NET 8 中的 WPF File Dialog 改进,.net,c#,wpf
您可以在 WPF-Samples 存储库中找到演示 OpenFolderDialog 和其他文件对话框用法的更多示例。

新对话框属性

我们还扩展了属性的数量来配置 WPF 中文件对话框的行为,尽可能多地涵盖当前的底层 API。以下强调了其中的一些:

  • ClientGuid 标识对话框的持久状态。这允许 Windows 记住对话框状态,例如窗口大小、每个对话框最后使用的文件夹,例如“Save”和“Save As”对话框。
  • AddToRecent 设置为 false 指示对话框不把打开或保存的文件或文件夹添加到 Windows 为用户维护的最新项目列表中。例如,这可以用于防止配置文件出现在“Start”菜单的“Recommended”部分中。
  • CreateTestFile 设置为 false 可防止 SaveFileDialog 通过创建和删除虚拟文件来验证用户是否有权访问所选位置。当访问该位置的成本预计很高时,这会很有用。但是,应用程序在创建文件本身时必须执行所有适当的错误处理。
  • RootDirectory 将对话框中的文件夹树限制为某个文件夹及其子文件夹。以下是将 RootDirectory 设置为用户的 Pictures 文件夹的示例:
    .NET 8 中的 WPF File Dialog 改进,.net,c#,wpf

请检查请求或 API 提案中所有新属性的列表。我们诚邀您尝试新功能并向我们提供反馈。

File Dialogs 的下一步计划

关于文件对话框仍有改进的空间,例如支持虚拟文件、通过在用户界面中包含附加控件来自定义对话框。我们收到了来自社区提议实施文件对话框控件的请求,我们想邀请所有感兴趣的人参与制定此提案,并帮助我们确定对您和您的应用程序重要的功能的优先级。

社区亮点

特别感谢我们的社区贡献者 Jan Kučera 为保持对话框更新活跃而做出的不懈努力。他探索了不同的设计选项,准备了 API 提案,并全程参与实现了该功能。谢谢 Jan!

.NET 8 中的 WPF File Dialog 改进,.net,c#,wpf

大家好,我是 Jan,一名研究员、开发人员,也是 WPF 的忠实粉丝!

自 Microsoft 开始公开谈论 WPF 至今已有 20 年了,当时它的代号是 Avalon(这方面的知识让我赢得了我的第一本 WinFX 书),它成为使用 .NET 时间最长的应用程序框架之一。虽然它启发了许多其他框架,但似乎没有一个能在功能和简单性方面与它相媲美,这就是为什么 WPF 一直是我的首选。我特别看重它的布局系统,允许应用程序适应其内容。

对我来说,编程最有趣的部分就是与现实世界互动。我作为与社区合作的 Core Team 成员参与了 .NET Micro Framework(它将 WPF UI 模型引入嵌入式设备)。在 Microsoft Research,我在 James Scott 和 Steve Hodges 的出色团队中负责 .NET Gadgeteer工作。在他们的指导下,我成为了人机交互领域的研究员。

我的大部分空闲时间都花在了 Unicode 志愿服务上,我是 Unicode’s Script Ad Hoc Group 和 Keyboard Subcommittee 的副主席。我对国际化(尤其是文本输入和输出)的热情使我能够为 DirectWrite 文本整形引擎和新键盘布局的设计做出贡献。这项工作使我能够帮助越来越多的社区实现数字化,我希望我们也能让 WPF 跟上他们的需求。

我很高兴看到人们对 WPF 持续的兴趣和发展,并可以推荐任何考虑加入 WPF 的人加入这个热情的社区并塑造其未来。文章来源地址https://www.toymoban.com/news/detail-730704.html

到了这里,关于.NET 8 中的 WPF File Dialog 改进的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【WPF.NET开发】WPF中的XAML资源

    使用 XAML 中的资源 静态和动态资源 静态资源 动态资源 样式、DataTemplate 和隐式键 资源是可以在应用中的不同位置重复使用的对象。 资源的示例包括画笔和样式。 本概述介绍如何使用 Extensible Application Markup Language (XAML) 中的资源。 你还可以使用代码创建和访问资源。  备注

    2024年01月17日
    浏览(63)
  • 【WPF.NET开发】流文档

    什么是流文档? 流文档类型 创建流内容 与流相关的类 内容架构 自定义文本 流文档旨在优化查看和可读性。 流文档根据运行时变量(例如,窗口大小、设备分辨率和可选的用户首选项)来动态调整和重新排列内容,而不是设置为一个预定义的布局。 此外,流文档还提供一

    2024年01月17日
    浏览(41)
  • 【WPF.NET开发】预览事件

    先决条件 预览标记为“已处理”的事件 通过控件解决事件禁止问题 预览事件,也称为隧道事件,是从应用程序根元素向下遍历元素树到引发事件的元素的路由事件。 引发事件的元素在事件数据中报告为Source 。 并非所有事件场景都支持或需要预览事件。 本文介绍了预览事件

    2024年02月03日
    浏览(49)
  • 【WPF.NET开发】弱事件模式

    先决条件 为什么要实现弱事件模式? 应该由谁实现弱事件模式? 如何实现弱事件模式 在应用程序中,附加到事件源的处理程序可能不会与将处理程序附加到源的侦听器对象一同销毁。 这种情况下会导致内存泄漏。 Windows Presentation Foundation (WPF) 引入了可用于解决此问题的设

    2024年02月03日
    浏览(40)
  • 【WPF.NET开发】OpenType字体

    OpenType 字体格式 变量 大写字母 连字 花体 备用项 数字样式 版式类 本主题概述了 Windows Presentation Foundation (WPF) 中 OpenType 字体技术的一些主要功能。 OpenType 字体格式是 TrueType® 字体格式的扩展,增加了对 PostScript 字体数据的支持。 OpenType 字体格式由 Microsoft 和 Adobe Corporatio

    2024年01月16日
    浏览(42)
  • .net wpf程序 移花接木

    最近在研究C# .net桌面程序。非常有趣 软件是国外作者写的 公司要求修改翻译 从最初的开源变成闭源再到加壳. 一路让我这个小小的职员好蛋疼. 软件是VS2015 C# WPF 程序 在不脱壳的情况下 实现挂钩类托管函数 遍历WPF控件汉化 首先通过各种手段脱壳目标程序,哪怕是不能运行

    2024年02月07日
    浏览(37)
  • WPF .NET 7.0学习整理(一)

    参照文档进行不系统的整理,看到那写到那O.o DependencyProperty:使用专有字段支持属性的标准模式的替代方法。 DependencyObject:定义了可以注册和拥有依赖属性的基类。 属性及其支持性 DependencyProperty 字段的命名约定非常重要。 字段总是与属性同名,但其后面追加了 Property 后

    2024年02月09日
    浏览(34)
  • WPF C# .NET7 基础学习

    学习视频地址:https://www.bilibili.com/video/BV1hx4y1G7C6?p=3vd_source=986db470823ebc16fe0b3d235addf050 开发工具:Visual Studio 2022 Community 基础框架:.Net 6.0 下载创建过程略 .Net和.Framework 区别是Net是依赖项,Framework是引用 1.定义一个命名空间, 最常用 不只包括using namespace,还用开头使用的usin

    2024年02月10日
    浏览(47)
  • [.NET/WPF] CommunityToolkit.Mvvm 异步指令

    我们在开发中, 经常会有这样的需求: 点击按钮后, 进行一些耗时的工作 工作进行时, 按钮不可再次被点击 工作进行时, 会显示进度条, 或者 “加载中” 的动画 CommunityToolkit.Mvvm 中的 RelayCommand 除了支持最简单的同步方法, 还支持以 Task 作为返回值的异步方法, 当我们为这样的异

    2024年02月12日
    浏览(45)
  • WPF使用Zxing.net生成二维码

    在Nuget引用Zxing.net 包和ZXing.Net.Bindings.Windows.Compatibility包即可。

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包