























2018年06月,微软发布了.NET Core 1.0
.NET Core 是一个开源的、跨平台的 .NET 实现,是新一代.NET的基石,支持Windows, Linux, macOS, 以及Docker。
这是微软开源的一大步。
微软现任 CEO Satya Nadella 主导全面拥抱开源,提出 Microsoft ♥ Linux 理念,推动微软从封闭生态转向开放战略,直接促成了开源跨平台 .NET Core 的横空出世。

.NETConf2019大会上,微软发布了.NET Core 3.0稳定版。.NET Core 从 3.0 开始正式支持 WPF和Winforms
一直到现在的.NET 10(正式版)/.NET 11预览版,WPF加入了不少新功能。
下面我们看一下从.NET Core 3.1到.NET 10,WPF新增加了哪些功能
开始支持WPF
WPF设计器作为Visual Studio 2019的一部分,不过那会的使用体验真的不太行,例如无法通过右键菜单从代码跳转到XAML。稳定性也不行。
XAML 设计器功能升级优化
提升热重载功能性能,加速热重载显示。
关于热重载,可以参考这篇文章
https://www.cnblogs.com/zhaotianff/p/11636787.html
WPF for .NET 7 中的许多改进都集中在性能上,例如:
为控件添加了更多的键盘交互操作。
虽然 WPF 在 .NET Framework 上仍然完全受支持和服务,但大多数修补程序和所有新功能主要在 .NET 进行,在那里我们有机会进行更大的更改。 WPF 社区帮助解决了此版本中一些长期存在的 bug:
详细功能更新介绍链接:
https://devblogs.microsoft.com/dotnet/wpf-on-dotnet-7/
以前,远程访问的所有 WPF 应用程序必须使用软件呈现,即使系统具有硬件呈现功能。 .NET 8 添加了一个选项,允许你选择使用远程桌面协议(RDP)的硬件加速。
硬件加速是指使用计算机的图形处理单元(GPU)加快应用程序中图形和视觉效果的呈现。 这可以提高性能和更无缝的响应式图形。 相比之下,软件呈现只依赖于计算机的中央处理单元(CPU)来呈现图形,这可能会变慢且效率更低。
要选择加入,请在 Switch.System.Windows.Media.EnableHardwareAccelerationInRdp 文件中,将 true 配置属性设置为 。
WPF 包含名为 OpenFolderDialog 的新对话框控件。 此控件允许用户浏览和选择文件夹。 以前,应用开发人员依赖于第三方软件来实现此功能。
这个功能在WPF出现的这么多年,也算是加进来了。
此前,大部分是借助System.Windows.Forms.dll类库提供的功能
1 var openFolderDialog = new OpenFolderDialog() 2 { 3 Title = "Select folder to open ...", 4 InitialDirectory = Environment.GetFolderPath( 5 Environment.SpecialFolder.ProgramFiles) 6 }; 7 8 string folderName = ""; 9 if (openFolderDialog.ShowDialog()) 10 { 11 folderName = openFolderDialog.FolderName; 12 }
详细的功能更新介绍可以访问以下链接:
https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/whats-new/net80
https://www.cnblogs.com/zhaotianff/p/19952424
WPF 从未在 UI 控件(如 TextBlock)中支持基于连字符的连字。 这个长期存在的社区要求已在 .NET 9 中添加。
这是未应用于 .NET 8 字形的连字的图像。

现在,在 .NET 9 中呈现的文本如下:

BinaryFormatter 被视为不安全,因为它容易受到反序列化攻击,这可能导致拒绝服务(DoS)、信息泄露或远程代码执行。 它在反序列化漏洞被充分理解之前实现,其设计不遵循现代安全最佳做法。
从 .NET 9 开始,其实现已被删除,以防止这些安全风险。 使用时 BinaryFormatter , PlatformNotSupportedException 将引发异常。
WPF在许多场景中使用BinaryFormatter,例如在剪贴板和拖放操作的数据序列化时。 在内部,WPF 继续使用更安全的 BinaryFormatter 子集来处理具有已知类型集的特定用例。
关于序列化,可以参考前面的文章
https://www.cnblogs.com/zhaotianff/p/17402238.html
详细的功能更新介绍可以访问以下链接:
https://learn.microsoft.com/en-us/dotnet/desktop/wpf/whats-new/net90
通过将内部数据结构替换为基本 .NET 类型(例如 ReadOnlyCollection<T>),提高了性能。 这最大限度地减少了 UI 自动化和文件对话框中的分配,并加快了像素格式转换的速度。
通过优化缓存作、数组处理以及将字体集合加载程序迁移到托管代码来提高性能。
针对字体呈现、动态资源、输入合成、跟踪日志记录、正则表达式使用情况和 XAML 分析优化了性能。
.NET 10 中已解决了各种 bug,以改进对 WPF 中 Fluent UI 样式的支持。 Fluent UI 样式支持仍在进行中。
Fluent 样式添加了更多控件,例如:
修复了 Expander 的动画。
修复了与HighContrast相关的崩溃问题。
为控件添加了遗漏的 RecognizesAccessKey 标记。
已修复MenuItem、Expander和TreeViewItem从右到左布局的问题。
WPF 和 Windows 窗体现在使用相同的剪贴板 API。 这两种桌面技术统一了它们与剪贴板的交互方式。
.NET 9 已将 BinaryFormatter弃用,它用于某些剪贴板操作。 这些剪贴板操作要求你选择启用兼容包,或者解决操作相关的问题。 为了减轻从 BinaryFormatter迁移的困难,.NET 10 将废弃某些剪贴板方法,以表明它们不应再被使用。 我们正在添加更多方法来帮助用户使用剪贴板数据进行 JSON 序列化,从而避免对 BinaryFormatter 的需求。
解决了各种问题,包括 UI 元素游标类型、当位图流为空时的崩溃问题、生成和测试步骤的错误,以及 BitmapMetadata 和本机依赖项中的小 bug。
解决了ScrollViewer和ContextMenu的本地化问题。
用于 System.Xaml 和 WindowsBase 的单元测试超过 4,000 个。
通过优化缓存作、数组处理以及将字体集合加载程序迁移到托管代码来提高性能。
由于迁移出 .NET Framework 环境,导致与代码访问安全性(CAS)相关的属性和代码没有被使用。 其中许多已在 .NET 代码库中删除。
OleCmdHelper/ISecureCommand中删除未使用的 CAS 和 XBAP 代码。FontSourceCollection/FontSource中删除未使用的 CAS 代码。进行了广泛的代码清理,包括语法标准化和参数清晰度,以提高代码可读性和可维护性。 调试模式已现代化,旧构造(如 ArrayList 已逐步淘汰)以保持可维护性。
社区贡献者 bstordrup 为 MessageBox 提供了更多按钮和结果选项的增强。 有关详细信息,请参阅 #9613。
社区参与者 dotMorten 增强了 Grid 行和列定义属性,以支持基于字符串的短格式语法。 如下所示:
现在可以按如下所示编写:
https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/whats-new/?source=recommendations
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。