惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Webroot Blog
Webroot Blog
U
Unit 42
A
About on SuperTechFans
宝玉的分享
宝玉的分享
月光博客
月光博客
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Securelist
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
Intezer
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
V
V2EX
L
LangChain Blog
AI
AI
G
GRAHAM CLULEY
T
Tor Project blog
人人都是产品经理
人人都是产品经理
D
Docker
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
I
InfoQ
Y
Y Combinator Blog
C
Comments on: Blog
GbyAI
GbyAI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
H
Help Net Security
Vercel News
Vercel News
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿

博客园 - zhaotianff

一文带你搞懂医疗器械设计开发全生命周期 Windows如何清除本机记录的git用户名和密码 HL7协议详解 医疗行业 GDT 数据格式详解 一文带你搞懂C# 异步编程(async/await)底层原理 如何在C#中使用Chromium headless(无头模式)浏览器 如何在WPF中使用 Fluent 主题 Windows平台下的各种原生UI框架介绍 C#如何Hook托管函数 WinDbg 用户层调试进阶教程 Windows编程的一些基础理论 推荐一款优秀的Windows经典文件管理器项目-WinFile Windows如何阻止应用程序联网 如何在WPF中捕获窗口外的事件 如何查看Windows进程的启动来源 Visual Studio 2026新解决方案格式slnx详解 我的微软MVP申请通过了 WPF MVVM实战系列教程(八、Prism DialogService, 对话框服务) WPF MVVM实战系列教程(七、Prism模块化) WPF 性能优化实战指南 WPF MVVM实战系列教程(六、Prism区域导航) WPF MVVM实战系列教程(五、Prism中的MVVM) WPF MVVM实战系列教程(四、Prism中的依赖注入) 微软 IDE 新纪元:Visual Studio 2026 初体验 Windows 7无法安装VMWare Tools的解决办法 WPF MVVM实战系列教程(三、创建Bootstrapper/启动器) WPF MVVM实战系列教程(二、使用Visual Studio 创建Prism项目) WPF MVVM实战系列教程(一、Prism框架介绍)
不同.NET版本中的WPF新增功能
zhaotianff · 2026-04-29 · via 博客园 - zhaotianff

.NET Core的出现

2018年06月,微软发布了.NET Core 1.0

.NET Core 是一个开源的、跨平台的 .NET 实现,是新一代.NET的基石,支持Windows, Linux, macOS, 以及Docker。

这是微软开源的一大步。

微软现任 CEO Satya Nadella 主导全面拥抱开源,提出 Microsoft ♥ Linux 理念,推动微软从封闭生态转向开放战略,直接促成了开源跨平台 .NET Core 的横空出世。

e24123e906b2b5a949c248848cf44700_ms_loves_linux

.NETConf2019大会上,微软发布了.NET Core 3.0稳定版。.NET Core 从 3.0 开始正式支持 WPF和Winforms

一直到现在的.NET 10(正式版)/.NET 11预览版,WPF加入了不少新功能。

下面我们看一下从.NET Core 3.1到.NET 10,WPF新增加了哪些功能

.NET Core 3.0

开始支持WPF

.NET Core 3.1

 WPF设计器作为Visual Studio 2019的一部分,不过那会的使用体验真的不太行,例如无法通过右键菜单从代码跳转到XAML。稳定性也不行。

.NET Core 5.0

XAML 设计器功能升级优化

.NET 6(.NET Core 5.0后面的版本改名为.NET)

提升热重载功能性能,加速热重载显示。

关于热重载,可以参考这篇文章

https://www.cnblogs.com/zhaotianff/p/11636787.html

.NET 7

性能改进

WPF for .NET 7 中的许多改进都集中在性能上,例如:

  • 尽可能避免进行装箱和拆箱操作。
  • 避免在堆上分配不必要的对象。
  • 重复使用 StringBuilder 实例,不要创建新实例。
  • 在不需要时停止使用 StringBuilder 。

辅助功能改进和修复

为控件添加了更多的键盘交互操作。

  • DataGridGridView列宽可以使用Alt + 左箭头键/右箭头键进行调整。
  • 为 DataGrid该列启用排序后,可以使用 F3 对列进行排序。
  • 现在,屏幕上的旁白会正确播报可勾选的菜单项。

故障修复

虽然 WPF 在 .NET Framework 上仍然完全受支持和服务,但大多数修补程序和所有新功能主要在 .NET 进行,在那里我们有机会进行更大的更改。 WPF 社区帮助解决了此版本中一些长期存在的 bug:

详细功能更新介绍链接:

https://devblogs.microsoft.com/dotnet/wpf-on-dotnet-7/

 .NET 8

硬件加速

以前,远程访问的所有 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 

.NET 9.0

加入Fluent主题,这个功能可以参考前面的文章

https://www.cnblogs.com/zhaotianff/p/19952424

基于连字符的连字功能支持

WPF 从未在 UI 控件(如 TextBlock)中支持基于连字符的连字。 这个长期存在的社区要求已在 .NET 9 中添加。

这是未应用于 .NET 8 字形的连字的图像。

这是一个简单 WPF 应用程序的屏幕截图,显示了在 .NET 8 中字形未合成为连字的文本块。

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

一张简单 WPF 应用的截图,其中一个文本块显示了在 .NET 9 中字形如何被组合成连字。

不再支持 BinaryFormatter

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 10.0

性能改进

通过将内部数据结构替换为基本 .NET 类型(例如 ReadOnlyCollection<T>),提高了性能。 这最大限度地减少了 UI 自动化和文件对话框中的分配,并加快了像素格式转换的速度。

通过优化缓存作、数组处理以及将字体集合加载程序迁移到托管代码来提高性能。

针对字体呈现、动态资源、输入合成、跟踪日志记录、正则表达式使用情况和 XAML 分析优化了性能。

Fluent主题样式更改

.NET 10 中已解决了各种 bug,以改进对 WPF 中 Fluent UI 样式的支持。 Fluent UI 样式支持仍在进行中。

剪贴板更改

WPF 和 Windows 窗体现在使用相同的剪贴板 API。 这两种桌面技术统一了它们与剪贴板的交互方式。

.NET 9 已将 BinaryFormatter弃用,它用于某些剪贴板操作。 这些剪贴板操作要求你选择启用兼容包,或者解决操作相关的问题。 为了减轻从 BinaryFormatter迁移的困难,.NET 10 将废弃某些剪贴板方法,以表明它们不应再被使用。 我们正在添加更多方法来帮助用户使用剪贴板数据进行 JSON 序列化,从而避免对 BinaryFormatter 的需求。

故障修复

解决了各种问题,包括 UI 元素游标类型、当位图流为空时的崩溃问题、生成和测试步骤的错误,以及 BitmapMetadata 和本机依赖项中的小 bug。

解决了ScrollViewerContextMenu的本地化问题。

用于 System.Xaml 和 WindowsBase 的单元测试超过 4,000 个。

通过优化缓存作、数组处理以及将字体集合加载程序迁移到托管代码来提高性能。

代码清理

由于迁移出 .NET Framework 环境,导致与代码访问安全性(CAS)相关的属性和代码没有被使用。 其中许多已在 .NET 代码库中删除。

  • 从所有库中删除未使用的 CAS 资源字符串及其翻译。
  • 从 OleCmdHelper/ISecureCommand中删除未使用的 CAS 和 XBAP 代码。
  • 从 FontSourceCollection/FontSource中删除未使用的 CAS 代码。

进行了广泛的代码清理,包括语法标准化和参数清晰度,以提高代码可读性和可维护性。 调试模式已现代化,旧构造(如 ArrayList 已逐步淘汰)以保持可维护性。

新 API

MessageBox

社区贡献者 bstordrup 为 MessageBox 提供了更多按钮和结果选项的增强。 有关详细信息,请参阅 #9613

Grid控件升级

社区参与者 dotMorten 增强了 Grid 行和列定义属性,以支持基于字符串的短格式语法。 如下所示:

现在可以按如下所示编写:

参考链接:

https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/whats-new/?source=recommendations