自从 Windows Form 在 2018 年底开源并移植到 .NET Core 以来,团队和我们的外部贡献者都在忙于修复旧的漏洞和添加新功能。在这篇文章中,我们将讨论 .NET 5.0 中 Windows  Form 的新特性。

Windows控件的增加与增强

  也许今天关于 Windows Form 最令人兴奋的事情是我们在 GitHub 上的充满活力和参与度的社区。许多新特性和增强是我们的社区成员建议的,甚至是完全实现的。在 .NET 5.0 的时间表内,我们已经接受并合并了 900 多个 pull-request,其中 70% 以上的 PRs 来自我们的社区。我们非常感谢 @hughbe, @gpetrou, @weltkante, @kpreisser 和许许多多帮助我们改进的开发者们。

  以下是我们从社区收到的一些贡献的例子。

新TaskDialog控件

  @kpreisser贡献

  task dialog 是一种对话框,可用于显示信息和接收用户的简单输入,但具有比 message box 更多的功能。与 message box 类似,操作系统根据您设置的参数对其进行格式化。

改进ListView

  @hughbe 和 @lonitra 贡献

  ListView 控件对于 Windows 窗体开发人员来说是非常熟悉的,但是它缺少 API 来方便地访问 Windows Vista 中添加的一些特性,比如可折叠组、组任务、副标题和页脚。

  在 .NET 5.0 中,我们弥补了 API 的差距,现在 Windows Form 的 ListView 更接近于本地的 Win32 控件。

改进FileDialog

  @jnm2 贡献

  FileDialog 收到了一个新的 API : FileDialog.ClientGuid。Windows file dialog 允许调用应用程序将 GUID 与对话框的持久化状态关联起来。对话框的状态可以包括诸如最近访问的文件夹、对话框的位置和大小等因素。通常,此状态是基于可执行文件的名称持久化的。通过指定 GUID,应用程序可以为同一应用程序中对话框的不同版本拥有不同的持久化状态(例如,import dialog 和 open dialog)。

性能改进

  一直被认为是围绕 Win32 API 集的托管封装。因此,Windows Form 一直严重依赖互操作层来与非托管 Windows 组件通信。在 .NET Core 早期的首要任务就是优化我们的互操作层,使结构具有 blittable(blittable 是:在托管和非托管内存中都有公共的表示形式,而不需要 Interop 封送拆收器的特殊处理...),明确地选择更有效的“W”函数,并在可能的情况下使用“unsafe”代码。所有这些变化都是我们所说的“花生酱变化”,从某种意义上说,每一个变化都很小,很难观察到,但在应用程序的生命周期中,这些变化累积起来会带来实质性的性能提升。

  在 .NET 5.0 中,我们提高了门槛,优化了几个绘制路径。历史的 Windows Form 依赖于 GDI+(和一些 GDI)来呈现操作。虽然 GDI+ 比 GDI 更容易使用,因为它通过 Graphics 对象抽象设备上下文(包含特定显示设备信息的结构,如显示器或打印机),但由于额外的开销,它的速度也很慢。在我们处理纯色和笔刷的一些情况下,我们选择使用 GDI。

  我们还扩展了一些渲染相关 IDeviceContext 接口的 API,例如 PaintEventArgs,它可能不能直接提供给 Windows Form 开发者,允许我们绕过 GDI+ 图形对象,从而减少分配和获得速度。这些优化显示了重绘路径中内存消耗的显著减少,在某些情况下节省了 10 倍内存分配。

  如果你想了解更多的技术细节,你可以观看 API 评论,或者观看。.NET Community Standup,Jeremy Kuhne在其中谈论了这些优化。

  你可以在这里获取测试项目:https://github.com/JeremyKuhne/RedrawPerformance,并自己验证结果,就像我们的用户之一——Jeremy Sinclair:

  最后重要一点,我们已经扩展了 TextRenderer API 来接受 ReadOnlySpan<char>重载,因为绘制和测量文本是一个非常常见的活动。当可以避免新的字符串分配时(分割其他输入,构建基于堆栈的字符数组,等等),这将允许显著更有效的文本渲染。

可访问性改进和修复

  在过去的几年中,团队一直在更新已经有20多年的 Windows Forms SDK,以满足今天的可访问性需求和适用性。

  在 .NET 5.0 中,我们做了很多改进,包括但不限于以下内容:

  UI 自动化支持的许多控件,包括:

      • Button

      • ListView

      • CheckBox

      • RadioButton, 等

  LegacyIAccessible Control Pattern 支持使客户端能够更好地与UI控件交互,并允许开发人员为其控件设置自定义 AccessibleRole 属性。

  Test 和 TextRange 控件模式支持客户端从基于文本的控件检索文本内容、文本属性和嵌入的对象。

  我们还修复了一些在某些辅助工具下影响用户体验的问题。例如,我们重写了可访问性实现,以访问 AccessibleObject 不再导致过早创建控件句柄的方式,这反过来确保了更多可预测的控制行为,并避免了 UI 中的意外情况。

  我们还改进和纠正了一些控件(如 PropertyGrid 和 MonthCalendar)中的行为,这些控件可能会阻止易用性工具正确导航 UI,或者在严重的情况下,导致应用程序崩溃。

VB支持

  Visual Basic 及其应用程序框架在 .NET 5 和 Visual Studio 16.8 中得到了支持!Visual Studio 16.8 包含 Windows Form 设计器,因此 Visual Basic已经为迁移现有应用程序或创建新应用程序做好了准备。

  更多信息参考《Visual Basic WinForms Apps in .NET 5 and Visual Studio 16.8 post.》

  向@paul1956致敬,感谢他帮助我们解决Visual Basic相关问题。

破坏性变化

  虽然我们打算尽可能地保持与 .NET Framework 和 .NET Core 的向后兼容性,但这并不总是谨慎的。你可以在这里找到破坏性变化的列表:

      • .NET Framework to .NET Core 3.1

      • .NET Core 3.1 to .NET 5.0

  已知问题列表请参考《.NET 5.0 Known Issues document》。

展望未来

  我们意识到目前的高 DPI 支持还远远不够完美,这是我们计划在 .NET 6.0 时间框架内改进的地方。“高DPI支持”的含义有很多方面,所以我们很乐意了解更多它对你的意义。如果你有特别的问题想让我们解决,请在下面留下评论或直接在 dotnet/winforms 中提交问题。

  我们计划继续进行“花生酱优化”、可访问性改进、可空引用类型注释和一般代码改进。

报告bug并提出建议

  如果您有任何意见、建议或面临的问题,请让我们知道!通过 Visual Studio Feedback 提交 Visual Studio 和 Designer 相关的问题(在 Visual Studio 的右上角寻找一个按钮),以及在我们的 GitHub 仓库中提交 Windows 窗体运行时相关的问题。

  我们还考虑 API 建议,进一步丰富 Windows 窗体 SDK,使构建 Windows 应用程序更容易(如任务对话框)。如果你拥护一个提案——你很有可能会在 Windows Forms SDK 中看到它。

  你也可以成为 Windows 窗体代码库的贡献者!我们的存储库中有标记为“up for grabs”的项目,并批准了准备开发的 API,我们将非常感谢您帮助实现它们!

  编码快乐!

原文链接

  https://devblogs.microsoft.com/dotnet/whats-new-in-windows-forms-runtime-in-net-5-0/

【译】.NET 5. 0 中 Windows Form 的新特性的更多相关文章

  1. Android5.0中Material Design的新特性

    最近项目中需要用到Material Design,整理了下面几个常用的控件,以便记忆. 一.Snackbar 1.作用:与Toast类似,但是可以点击监听: 2.使用: (1)Snackbar调用静态 ...

  2. [译]C#8.0中一个使接口更加灵活的新特性-默认接口实现

    9月份的时候,微软宣布正式发布C#8.0,作为.NET Core 3.0发行版的一部分.C#8.0的新特性之一就是默认接口实现.在本文中,我们将一起来聊聊默认接口实现. 众所周知,对现有应用程序的接口 ...

  3. Atitit opencv3.0  3.1 3.2 新特性attilax总结

    Atitit opencv3.0  3.1 3.2 新特性attilax总结 1. 3.0OpenCV 3 的改动在哪?1 1.1. 模块构成该看哪些模块?2 2. 3.1新特性 2015-12-21 ...

  4. ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

    放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...

  5. Python 3.8.0 正式版发布,新特性初体验 全面介绍

    Python 3.8.0 正式版发布,新特性初体验 北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性. 赋值表达式 PE ...

  6. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  7. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  8. ABAP 7.52 中的Open SQL新特性

    S/4 HANA 1709 已经在几个月前发布,随之而来的是ABAP 7.52. 本文翻译了更新文档中有关Open SQL的部分 本文链接:http://www.cnblogs.com/hhelibe ...

  9. ABAP 7.40, SP08 中的 Open SQL 新特性

    1,使用 data_source~*指定列 在7.40, SP08中,可以在SELECT语句中使用data_source~*来指定选取不同的数据库表.视图的全部列来作为结果集.它也可以和单独指定的列c ...

随机推荐

  1. Mac苹果电脑单片机开发

    1.安装虚拟机 可以阅读往期文章:Mac苹果电脑安装虚拟机 2.在虚拟机上安装CH340驱动,keil4,PZ-ISP, 下载 CH340驱动安装  下载keil4破解及汉化  下载普中科技烧录软件

  2. win8.1默认输入法设置

    1.右击左下角,选择控制面板 2.选择更改输入法 3.选择高级设置 4.在替代默认输入法,从下拉列表中选择自己已安装的输入法,比如搜狗拼音输入法,qq拼音输入法等其他输入法

  3. vs code编写java

    不知不觉中vs code变得非常强大了,今天小编就分享一下vs code编写java语言.其实除了java语言,还支持很多语言. 首先看下vs code欢迎页面支持哪些语言: 好家伙,支持的东西还真不 ...

  4. 哎,这让人抠脑壳的 LFU。

    这是why哥的第 83 篇原创文章 让人抠脑壳的 LFU 前几天在某APP看到了这样的一个讨论: 看到一个有点意思的评论: LFU 是真的难,脑壳都给我抠疼了. 如果说 LRU 是 Easy 模式的话 ...

  5. Angular入门到精通系列教程(10)- 指令(Directive)

    1. 摘要 2. 组件与指令之间的关系 2.1. 指令的种类 3. Angular 中指令的用途 4. 指令举例 4.1. 指令功能 4.2. Anuglar CLI生成基本文件 4.3. Direc ...

  6. C语言指针的大小

    C语言指针的大小 今天看到一道题目是这样的,写出以下变量在32位设备上的大小(占多少个字节) 然后其中就有一些指针类型的数据,那么我们知道在C语言中指针的大小都是一样的,不管是有数据类型的还是void ...

  7. Pycharm同时执行多个脚本文件

    Pycharm同时执行多个脚本文件 设置Pycharm使它可以同时执行多个程序 打开Pycharm 找到Run,点击确认 点击Edit Configurations 右上角Allow parallel ...

  8. [WPF] 在单元测试中使用 Prism 的 EventAggregator,订阅到 ThreadOption.UIThread 会报错

    1. 问题 [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { ContainerLocator ...

  9. 腾讯云COS对象存储占据数据容灾C位

    说到公有云容灾,大家首先想到的是云上数据备份. 然而,随着企业核心业务逐渐从线下迁移到云上,客户提出了更高的要求.如何确保云上业务的高可用.数据的高可靠,这对云厂商提出了新的挑战. 腾讯云作为全球领先 ...

  10. 使用CDN访问免备案网站

    如何使用CDN绕过服务器域名备案 前言 不得不说,大陆需要备案,时间真的有点长,至少得5天~20天起步,对于我们这些火急火燎的站长还是比较难受的.这里教大家如何使用cdn绕过备案, 访问速度很快,亲测 ...