修正 Visual Studio 中 Windows Forms 設計工具的 HDPI/縮放比例問題

在本文中,您會了解如何以非 DPI 感知處理序方式執行 Visual Studio,來解決 HDPI 監視器上 Windows Forms 設計工具的縮放比例限制,解決轉譯問題。 HDPI 代表每英吋的高點,每個點都代表實體裝置像素。

較高的像素密度會建立較銳利的影像,並正確顯示縮放比例大小元素。 如果沒有適當的縮放比例,使用者介面 (UI) 元素和文字太小而無法有效使用,而且可能會重疊。 為了協助解決此問題,Windows 會自動縮放 UI 百分位數以符合 DPI 設定。 例如,100% 的 DPI 設定代表 96 DPI,而 125% 為 120 DPI。 用來隨附 96 像素/英吋的監視器,Windows 用來做為 100% 點陣圖繪圖的基準。 不過,隨著顯示器技術的進步,監視器現在隨附 300 DPI 或更高版本的面板。

當應用程式宣告自己為 DPI 感知時,其為一個陳述式,會指定應用程式在較高的 DPI 設定中表現良好,因此 Windows 可以套用自動縮放。 相反地,非 DPI 感知應用程式會以固定 DPI 值每英吋 96 像素 (或 100%) 呈現,因此不會套用自動縮放。

Windows Forms 設計工具為非 DPI 感知

注意

在 Visual Studio 2022 版本 17.8 或更新版本中,您可以避免本文所述的問題。 Visual Studio 2022 版本 17.8 在 DPI 感知應用程式內提供對非 DPI 感知索引標籤的支援。 請參閱 Visual Studio DPI 改進。 這可讓您為非 DPI 感知內容設計 Windows Forms,而不需要以非 DPI 感知模式執行 Visual Studio。 若要在 Windows Forms 專案中使用此設定,請將專案檔案中的屬性 ForceDesignerDPIUnaware 設定為 true

<PropertyGroup>
  ...
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>

根據預設,Visual Studio 是一種 DPI 感知應用程式,這表示顯示會自動縮放。 不過,Windows Forms 設計工具是非 DPI 感知應用程式,因此其會顯示為 96 DPI 的點陣圖。 如果沒有自動縮放支援,在 HDPI 監視器上開啟表單時,就會發生問題與重疊,如下圖所示:

Screenshot of Windows Forms Designer on HDPI monitor that shows issues due to lack of autoscaling support.

當您在 HDPI 監視器的 Windows Forms 設計工具中開啟表單時,Visual Studio 會顯示一個資訊列,顯示監視器目前的縮放百分比 (例如 150%/144 DPI),此選項可將 Visual Studio 重新啟動為 100% 縮放以符合 Windows Forms 設計工具,以及進一步資訊。 以 100% 的縮放比例重新啟動可造成非 VS DPI 感知,可適當轉譯而不重疊。

Screenshot of the information bar in Visual Studio to restart in DPI-unaware mode.

提示

  1. 如果您關閉資訊列並想要將 Visual Studio 重新開機為非 DPI 感知,請使用 DevEnv.exe 工具
  2. 如果您未在設計工具中工作,則可以忽略資訊列。 您也可以停用通知來停止顯示資訊列。

以非 DPI 感知處理序方式重新啟動 Visual Studio

解決這些 UI 問題的建議解決方案是重新啟動 Visual Studio 做為非 DPI 感知處理序,這表示其會以 100% 縮放比例重新啟動 (96 DPI)。

若要切換至非 DPI 感知:

  • 當您在 Windows Forms 設計工具中開啟表單時,於黃色資訊列上選取 [以 100% 縮放比例重新啟動 Visual Studio] 選項。

當您在 Windows Form 設計工具中完成工作後,請務必以 DPI 感知處理序方式來重新啟動 Visual Studio 以將其返回為其預設。

若要回到 DPI 感知:

  • 關閉並重新開啟 Visual Studio,以再次回到 DPI 感知。 或者,選取資訊列中的 [將 Visual Studio 重新啟動為 DPI 感知處理序]

當 Visual Studio 以非 DPI 感知的身分執行時,設計工具配置問題就會解決,不過字型可能會變得模糊,且問題可能會出現在其他設計工具 (例如 XAML 設計工具)。 Visual Studio 會在以非 DPI 感知方式執行時顯示不同的資訊列,提示您「Visual Studio 正在以非 DPI 感知處理序方式執行。 WPF 和 XAML 設計工具可能無法正常顯示。」

注意

  • 在您選取以非 DPI 感知處理序方式重新啟動 Visual Studio 的選項之後,若有取消停駐的工具視窗,則工具視窗的位置可能會變更。
  • 若您使用預設的 Visual Basic 設定檔,或您在 [工具]>[選項]>[專案和解決方案] 中取消選取了 [在建立時儲存新的專案] 選項,Visual Studio 便無法在以非 DPI 感知處理序方式重新啟動時重新開啟您的專案。 但是,您可以在 [檔案]>[最近使用的專案和解決方案] 下選取專案來開啟它。

注意

  • 在您選取以非 DPI 感知處理序方式重新啟動 Visual Studio 的選項之後,若取消停駐工具視窗,則工具視窗的位置可能會變更。
  • 當 Visual Studio 重新啟動為非 DPI 感知處理序方式時,預設的 Visual Basic 設定檔不會重新啟動專案。 相反地,請透過 [檔案]>[最近的專案和方案] 來存取您的專案。

使用 Windows 將您的顯示縮放比例設為 100%

若要避免使用 Visual Studio 切換顯示縮放比例,請調整 Windows 設定中的縮放比例。 例如,在 Windows 11 中,您可以將縮放比例設定為 100% (96 DPI)。

若要這樣做,請在工作列搜尋方塊中鍵入顯示設定,然後選取 [變更顯示設定]。 在 [設定] 視窗中,將 [變更文字、應用程式及其他項目的大小] 設為 [100%]。 請注意,100% 縮放比例 (96 DPI) 可能會使使用者介面太小,而無法實際使用。

使用 DevEnv 命令列工具以停用縮放比例

若要使用命令列工具而非 UI (使用者介面) 工具來管理您的顯示設定,請使用 DevEnv.exedevenv.exe 命令會採用 /noscale 命令列參數,以 100% 的縮放比例模式執行。 以下說明其使用方式:

  1. 從 Visual Studio 功能表列選取 [工具]>[命令列]>[開發人員命令提示字元]
  2. 然後,輸入 devenv /noScale

其他選項

除了上述選項之外,您也可以嘗試下列選項:

疑難排解

若 DPI 感知轉換在 Visual Studio 中並未運作,請確定您在登錄編輯程式的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe 子機碼中並「沒有」dpiAwareness 值。 若有的話,請刪除該值。