.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章