共用方式為


適用於 .NET 8 的 Windows Forms 新功能

本文說明 .NET 8 中的一些新的 Windows Forms 功能和增強功能。

從 .NET Framework 移轉至 .NET 8 時,您應該注意幾項重大變更。 如需詳細資訊,請參閱 Windows Forms 的重大變更

資料繫結改進項目

新的資料繫結引擎在 .NET 7 中尚處於預覽狀態,目前已在 .NET 8 中完全啟用。 雖然規模不如現有的 Windows Forms 資料繫結引擎廣泛,但這個新引擎是以 WPF 為模型,方便您更輕鬆實作 MVVM 設計原則。

增強型資料繫結功能可讓您更輕鬆善加運用 MVVM 模式,並透過 Windows Forms 的 ViewModels 使用物件關係型對應器。 這樣可減少程式碼後置檔案中的程式碼數量。 更重要的是,可在 Windows Forms 與其他 .NET GUI 架構 (例如 WPF、UWP/WinUI 和 .NET MAUI) 之間共用程式碼。 請務必注意,雖然先前提及的 GUI 架構會使用 XAML 作為 UI 技術,但 XAML 不會傳入 Windows Forms。

介面 IBindableComponent 和類別 BindableComponent 會驅動新的繫結系統。 Control 會實作介面,並將新的資料繫結功能提供給 Windows Forms。

按鈕命令

按鈕命令在 .NET 7 中尚處於預覽狀態,目前已在 .NET 8 中完全啟用。 與 WPF 類似,實作 ICommand 介面的物件執行個體可指派給按鈕的 Command 屬性。 按下按鈕後,會叫用該命令。

指定該按鈕 CommandParameter 屬性的值後,即可在叫用命令時提供選擇性參數。

CommandCommandParameter 屬性位於 (DataBindings) 底下,並透過 [屬性] 視窗在設計工具中進行設定,如下圖所示。

Visual Studio 屬性視窗會醒目提示 Windows Forms 按鈕的 Command 和 CommandParameter 屬性。

Buttons 也會接聽 ICommand.CanExecuteChanged 事件,導致控制項查詢 ICommand.CanExecute 方法。 在該方法傳回 true 時,系統會啟用控制項;而在傳回 false 時,控制項則會停用。

Visual Studio DPI 改進項目

Visual Studio 2022 17.8 引進了非 DPI 感知設計工具索引標籤。 先前,Visual Studio 中的 [Windows 設計工具] 索引標籤會在 Visual Studio 的 DPI 上執行。 在設計非 DPI 感知 Windows Forms 應用程式時,這會導致問題。 您現在可確保設計工具會採取期望應用程式執行的相同縮放比例,無論是否使用 DPI 感知模式。 推出這項功能之前,您必須以非 DPI 感知模式來執行 Visual Studio,這讓 Visual Studio 本身在 Windows 中套用縮放比例時變得模糊。 現在起,您可以放手交給 Visual Studio,讓設計工具執行非 DPI 感知模式。

您可以將 <ForceDesignerDPIUnaware> 新增至專案檔,並將值設定為 true,以啟用 Windows Forms 專案的非 DPI 感知設計工具。

<PropertyGroup>
  <OutputType>WinExe</OutputType>
  <TargetFramework>net8.0-windows</TargetFramework>
  <Nullable>enable</Nullable>
  <UseWindowsForms>true</UseWindowsForms>
  <ImplicitUsings>enable</ImplicitUsings>
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
  <ApplicationHighDpiMode>DpiUnawareGdiScaled</ApplicationHighDpiMode>
</PropertyGroup>

重要

Visual Studio 會在載入專案時讀取此設定,而不是在專案變更時進行讀取。 變更此設定後,請卸載並重新載入專案,以利 Visual Studio 讀取此設定。

高 DPI 改進項目

使用 PerMonitorV2 的高 DPI 轉譯已改善:

  • 正確調整巢狀控制項。 例如,面板上的按鈕會放置在索引標籤頁面。

  • 根據目前的監視器 DPI 設定,縮放 Form.MaximumSizeForm.MinimumSize 屬性。

    從 .NET 8 開始,此功能預設為啟用,您必須退出宣告才能還原為先前的行為。

    若要停用此功能,請將 System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi 新增至 runtimeconfig.json 中的 configProperties 設定,並將值設定為 FALSE:

    {
      "runtimeOptions": {
        "tfm": "net8.0",
        "frameworks": [
            ...
        ],
        "configProperties": {
          "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": false,
        }
      }
    }
    

其他改進項目

以下是一些其他值得注意的變更: