.NET Framework中关于WPF的更新信息

.NET Framework 3.0 版中的新增功能

更新:2007 年 11 月

单独发布 .NET Framework 3.0 版 是为了在 .NET Framework 和 Windows 软件开发包 (SDK) 中包含以下技术。

对于此版本的核心 .NET Framework 没有任何功能更改。




.NET Framework 3.5 版中的新增功能

Windows Presentation Foundation

在 .NET Framework 3.5 中,Windows Presentation Foundation 包含多个方面的更改和改进,
其中包括版本控制、应用程序模型、数据绑定、控件、文档、批注和三维 UI 元素。

有关这些新功能和增强功能的详细信息,请参见 Windows Presentation Foundation 3.5 版中的新增功能




.NET Framework 3.5 SP1 中的新增功能

Windows Presentation Foundation

已经改进 Windows Presentation Foundation 的性能,其中包括启动速度的位图效果性能的提高。
为 Windows Presentation Foundation 增加的功能包括对业务线应用程序的更好支持、本机闪屏支持、DirectX 像素着色器支持以及新的 WebBrowser 控件。




.NET Framework 4 中的新增功能

Windows Presentation Foundation (WPF) 版本 4 包含以下方面的更改和改进:

  • 新控件,包括 CalendarDataGridDatePicker
  • VisualStateManager 支持更改控件的状态。
  • 利用触控和操作,您可以创建在 Windows 7 上同时接收来自多个触控的输入的应用程序。
  • 图形和动画支持布局舍入、像素着色器版本 3.0、缓存合成和缓动函数。
  • 文本改进了文本呈现,并支持在文本框中自定义插入符号的颜色和选定内容的颜色。
  • InputBindingCommand 属性、动态对象和 Text 属性支持绑定。
  • XAML 浏览器应用程序 (XBAP) 支持与网页通信,并且支持完全信任部署。
  • 利用 System.Windows.Shell 命名空间中新增的类型,您能够与 Windows 7 任务栏通信,还能将数据传递到 Windows shell。
  • Visual Studio 2010 中的 WPF 和 Silverlight 设计器中提供了各种设计器改进,有助于创建 WPF 或 Silverlight 应用程序。

有关更多信息,请参见 WPF 版本 4 的新增功能




.NET Framework 4.5 中的新增功能

在 .NET Framework 4.5 中,Windows Presentation Foundation (WPF) 在以下几个领域进行了更改和改进:

  • 利用新的 Ribbon 控件,你可以实现承载快速访问工具栏、应用程序菜单和选项卡的功能区用户界面。

  • 支持同步和异步数据验证的新 INotifyDataErrorInfo 接口。

  • VirtualizingPanelDispatcher 类的新功能。

  • 通过在非 UI 线程上访问集合,改进了在显示大型分组数据集时的性能。

  • 针对静态属性的数据绑定、针对实现 ICustomTypeProvider 接口的自定义类型的数据绑定,以及从绑定表达式中检索数据绑定信息。

  • 在值发生更改时重新定位数据(实时数据整理)。

  • 能够检查项目容器的数据上下文是否已断开连接。

  • 能够设置属性更改和数据源更新之间的时间间隔。

  • 改进了对实现弱事件模式的支持。 此外,事件现在可以接受标记扩展。




.NET 2015 的新增功能

.NET 2015 引入了 .NET Framework 4.6 和 .NET Core。

一些新功能两者都适用,而另一些功能则是 .NET Framework 4.6 或 .NET Core 的专属功能。

.NET 2015...
以前只知道Visual Studio 2015...
  • Windows Presentation Foundation (WPF)

    • HDPI 改进

      在 .NET Framework 4.6 中,WPF 现提供更出色的 HDPI 支持。 已对布局舍入进行了更改,以减少带边框的控件中的剪切实例。 默认情况下,仅当 TargetFrameworkAttribute 设置为 .NET Framework 4.6 时,才启用此功能。 对于定位旧版 Framework,但在 .NET Framework 4.6 上运行的应用程序,可以在 app.config 文件的 部分中添加下面的代码行,从而选择启用新行为:

      <AppContextSwitchOverrides
      value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />
      

      跨越具有不同 DPI 设置(多 DPI 设置)的多个监视器的 WPF 窗口现在完全呈现,且没有涂黑区域。 可以通过将下面的行添加到 app.config 文件的 <appSettings> 部分来选择退出此行为,以禁用此新行为:

      <add key="EnableMultiMonitorDisplayClipping" value="true"/>
      

      已向 System.Windows.Input.Cursor 添加了对基于 DPI 设置自动加载右侧光标的支持。

    • 触摸更好

      在 .NET Framework 4.6 中,客户在 Connect 中报告的触控服务导致不可预测行为发生的问题得到了解决。 Windows 应用商店应用程序和 WPF 应用程序的双击阈值现在与 Windows 8.1 及更高版本中的相同。

    • 透明子窗口支持

      .NET Framework 4.6 中的 WPF 支持在 Windows 8.1 及更高版本中使用透明子窗口。 这使得你可以在顶层窗口中创建非矩形的透明子窗口。 你可以通过将 HwndSourceParameters.UsesPerPixelTransparency 属性设置为 true 启用此功能。




.NET Framework 4.6.1 中的新增功能

Windows Presentation Foundation (WPF)

Windows Presentation Foundation 包括一些改进和更改。

提升了性能

在 .NET Framework 4.6.1 中,触控事件的触发延迟问题得到了解决。

此外在快速输入过程中,在 RichTextBox 控件中输入不再占用呈现线程。

拼写检查改进

WPF 中的拼写检查器在 Windows 8.1 和更高版本上进行了更新,可利用操作系统支持对其他语言进行拼写检查。

在 Windows 8.1 之前的 Windows 版本上,功能方面没有更改。

与以前版本的 .NET Framework 一样,可通过按以下顺序查找信息来检测 TextBox 控件或 RichTextBox 块的语言:

  • xml:lang(如果存在)。
  • 当前输入语言。
  • 当前区域性。

有关 WPF 中语言支持的详细信息,请参阅有关 .NET Framework 4.6.1 功能的 WPF 博客文章

针对每用户自定义词典的附加支持

在 .NET Framework 4.6.1 中,WPF 可识别全局注册的自定义字典。 除了能够针对每个控件注册它们,还提供了此功能。

在以前版本的 WPF 中,自定义词典无法识别已排除的单词和自动更正列表。

在 Windows 8.1 和 Windows 10 上,

通过使用可以置于 %AppData%\Microsoft\Spelling\<language tag> 目录下的文件来支持它们。

以下规则适用于这些文件:

  • 这些文件应具有扩展名 .dic(用于已添加的单词)、.exc(用于已排除的单词)或 .acl(用于自动更正)。

  • 这些文件应是以字节顺序标记 (BOM) 开头的 UTF-16 LE 纯文本。

  • 每行应包含一个单词(位于已添加和已排除的单词列表中),

    或是其中用竖线 ("|") 分隔单词的自动更正对(位于自动更正单词列表中)。

  • 这些文件被视为只读,不会由系统进行修改。

# 备注

WPF 拼写检查 API 不直接支持这些新文件格式,在应用程序中向 WPF 提供自定义词典应继续使用 .lex 文件。

示例

Microsoft/WPF 示例 GitHub 存储库中具有大量的 WPF 示例。 可通过向我们发送拉取请求或建立 GitHub 问题来帮助我们改进示例。

DirectX 扩展

WPF 包括一个 NuGet 包,它提供 D3DImage 的新实现,从而使你可以轻松地与 DX10 和 Dx11 内容进行互操作。

此包的代码已开放源代码,在 GitHub 上提供。




.NET Framework 4.6.2 中的新增功能

Windows Presentation Foundation (WPF)

在 .NET Framework 4.6.2 中,Windows Presentation Foundation 在以下几个方面进行了增强:

组排序

使用 CollectionView 对象对数据进行分组的应用程序现在可以显式声明如何对组进行排序。

显式排序可解决在应用动态添加或删除组,或在它更改分组中包含的项属性的值时出现的非直观排序问题。

它还可通过将分组属性比较从完整集合排序移动到组排序来改善组创建过程的性能。

为支持组排序,新的 GroupDescription.SortDescriptionsGroupDescription.CustomSort 属性描述如何对 GroupDescription 对象生成的组的集合进行排序。

这类似于同名 ListCollectionView 属性描述如何对数据项进行排序的方式。

PropertyGroupDescription 类的两个新静态属性:CompareNameAscendingCompareNameDescending,可用于最常见的情况。

例如,下面的 XAML 按年龄分组数据,按升序对年龄组排序,并按姓氏分组每个年龄组内的项。

<GroupDescriptions>
     <PropertyGroupDescription
         PropertyName="Age"
         CustomSort="{x:Static PropertyGroupDescription.CompareNamesAscending}"/>
     </PropertyGroupDescription>
</GroupDescriptions>

<SortDescriptions>
     <SortDescription PropertyName="LastName"/>
</SortDescriptions>

触控键盘支持

在可采用文本输入的控件接收触摸输入时,通过自动调用和解除 Windows 10 中的触控键盘,可在 WPF 应用程序中启用焦点跟踪。

在 .NET framework 的早期版本中,WPF 应用程序不能在不禁用 WPF 笔/触摸手势支持的情况下选择加入焦点跟踪。

因此,WPF 应用程序必须选择完整的 WPF 触摸支持或依赖于 Windows 鼠标提升。

按监视器 DPI

为了支持最近激增的 WPF 应用程序高 DPI 和混合 DPI 环境,.NET Framework 4.6.2 中的 WPF 启用了按监视器 DPI 感知。
有关如何使 WPF 应用成为按监视器 DPI 感知的详细信息,请参阅 GitHub 上的示例和开发人员指南

在 .NET framework 的早期版本中,WPF 应用为系统 DPI 感知。
换而言之,应用程序的 UI 由操作系统相应地进行缩放,具体取决于在其上呈现应用的监视器的 DPI。

对于在 .NET Framework 4.6.2 控制下运行的应用程序,可以在应用程序配置文件的 部分中添加配置语句,
在 WPF 应用程序中禁用按监视器 DPI 更改,如下所示:

<runtime>
   <AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>



.NET Framework 4.7 中的新增功能

Windows Presentation Foundation (WPF)

在 .NET Framework 4.7 中,WPF 新增了以下增强功能:

支持基于 Windows WM_POINTER 消息的触控/触笔堆栈

现在可以视情况使用基于 WM_POINTER 消息的触控/触笔堆栈,而不使用 Windows Ink 服务平台 (WISP)。
这是 .NET Framework 中的一项可选择启用的功能。 有关详细信息,请参阅应用程序兼容性部分。

WPF 打印 API 的新实现代码

System.Printing.PrintQueue 类中的 WPF 打印 API 调用 Windows 打印文档包 API,而不调用弃用的 XPS 打印 API
要了解此更改对应用程序兼容性的影响,请参阅应用程序兼容性部分。




.NET Framework 4.7.1 中的新增功能

#备注
此版本中未提及关于WPF的更新

.NET Framework 4.7.1 在以下几个领域新增了功能:




.NET Framework 4.7.2 中的新增功能

Windows Presentation Foundation

按源查找 ResourceDictionaries

从 .NET Framework 4.7.2 开始,诊断助手可以找到从给定源 URI 创建的 ResourceDictionaries
(此功能通过诊断助手使用,而非生产应用程序。)

通过诊断助手(例如 Visual Studio 的“编辑并继续”),用户可编辑 ResourceDictionary,将更改应用于正在运行的应用程序。
要实现这一点,其中一个步骤是从被编辑的字典中找到正在运行的应用程序创建的所有 ResourceDictionary。
例如,应用程序可以声明某个从给定源 URI 复制内容的 ResourceDictionary:

<ResourceDictionary Source="MyRD.xaml" />

编辑 MyRD.xaml 中的原始标记的诊断助手可以使用新功能来找到字典。
此功能通过新的静态方法 ResourceDictionaryDiagnostics.GetResourceDictionariesForSource 实现。
诊断助手使用标识原始标记的绝对 URI 调用新方法,如以下代码所示:

IEnumerable<ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri("pack://application:,,,/MyApp;component/MyRD.xaml"));

该方法返回空的枚举值,除非启用了 VisualDiagnostics 并且设置了 ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO 环境变量。

查找 ResourceDictionary 所有者

从 .NET Framework 4.7.2 开始,诊断助手可以找到给定 ResourceDictionary 的所有者。
(此功能供诊断助手,而非生产应用程序使用。)
每当对 ResourceDictionary 做出更改时,WPF 会自动查找所有可能会受此更改影响的 DynamicResource 引用。

诊断助手(例如 Visual Studio 的“编辑并继续”)可能想对此进行扩展以处理 StaticResource 引用。
此过程的第一步是找到字典的所有者,也就是找到其 Resources 属性引用该字典(不管是直接引用,还是通过 ResourceDictionary.MergedDictionaries 属性间接引用)的所有对象。
System.Windows.Diagnostics.ResourceDictionaryDiagnostics 类上实现的三个新的静态方法
(每个对应具有 Resources 属性的基类型)支持此步骤:

这些方法返回空的枚举值,除非启用了 VisualDiagnostics 并且设置了 ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO 环境变量。

查找 StaticResource 引用

现在,每当一个 StaticResource 引用被解析时,诊断助手都能收到通知。 (此功能供诊断助手,而非生产应用程序使用。)
诊断助手(例如 Visual Studio 的“编辑并继续”)可能想在 ResourceDictionary 中某个资源的值发生更改时更新该资源的所有使用。
WPF 为 DynamicResource 引用自动完成此操作,但不会为 StaticResource 引用有意执行该操作。
从 .NET Framework 4.7.2 开始,诊断助手可以利用这些通知来查找静态资源的使用情况。

该通知由新的 ResourceDictionaryDiagnostics.StaticResourceResolved 事件实现:

public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;

每当运行时解析 StaticResource 引用时,都会引发此事件。
StaticResourceResolvedEventArgs 参数描述解析,
并指示托管 StaticResource 引用的对象和属性及用于解析的 ResourceDictionary 和密钥:

public class StaticResourceResolvedEventArgs : EventArgs
{
   public Object TargetObject { get; }

   public Object TargetProperty { get; }

   public ResourceDictionary ResourceDictionary { get; }

   public object ResourceKey { get; }
}

除非启用 VisualDiagnostics 并设置了 ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO 环境变量,否则不会引发该事件
(且忽略它的 add 访问器)。

ClickOnce

Windows 窗体的 HDPI 感知应用程序、Windows Presentation Foundation (WPF) 以及 Visual Studio Tools for Office (VSTO) 都可以通过使用 ClickOnce 进行部署。
如果在应用程序清单中找到了以下条目,则部署将在 .NET Framework 4.7.2 下成功执行:

<windowsSettings>
   <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>

对于 Windows 窗体应用程序,不需要像以前那样在应用程序配置文件(而非应用程序清单)中设置 DPI 感知就可以成功完成 ClickOnce 部署。




.NET Framework 4.8 中的新增功能

Windows Presentation Foundation (WPF)

高 DPI 增强功能

在 .NET Framework 4.8 中,WPF 添加了对按监视器 V2 DPI 感知和混合模式 DPI 缩放的支持。 有关高 DPI 开发的其他信息,请参阅在 Windows 上开发高 DPI 桌面应用程序

.NET framework 4.8 改进了对支持混合模式 DPI 缩放的平台上的高 DPI WPF 应用程序中的寄宿 HWND 和 Windows 窗体互操作的支持(从 Windows 10 2018 年 4 月更新开始)。 通过调用 SetThreadDpiHostingBehaviorSetThreadDpiAwarenessContext 将寄宿 HWND 或 Windows 窗体控件创建为混合模式 DPI 缩放窗口时,它们可以托管在按监视器 V2 WPF 应用程序中,并且相应地调整大小和缩放。 此类托管内容不以本机 DPI 呈现;相反,操作系统将托管内容缩放到合适大小。 对按监视器 v2 DPI 感知模式的支持还允许 WPF 控件托管(即,设置为父级)在高 DPI 应用程序的本机窗口中。

若要启用对混合模式高 DPI 缩放的支持,可以设置以下 AppContext 切换应用程序配置文件:

<runtime>
   <AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false; Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false"/>
</runtime>



后感


看到这么多还在更新WPF, 甚至WCF, 以前对于版本的概念真的太忽视了...

TODO : 貌似.NET 4.8以后,还有WPF更新~,还未整理~

摘抄文档

.NET Framework 中的新增功能 - .NET Framework | Microsoft Learn

WPF 版本 4 的新增功能 | Microsoft Learn

.NET Framework 3.5 SP1 中的新增功能 | Microsoft Learn

.NET Framework 3.5 版中的新增功能 | Microsoft Learn

.NET Framework 3.0 版中的新增功能 | Microsoft Learn

posted @ 2024-01-22 22:19  zh89233  阅读(42)  评论(0编辑  收藏  举报