[原創][開源]C# Winform DPI自適應方案,SunnyUI三步搞定

Winform窗體隨着屏幕的DPI縮放,會引起窗體變形及字體變形。
SunnyUI的DPI縮放自適應方案目標爲隨着DPI縮放,窗體和字體均不變形,從而實現界面的美觀。
主要有以下三步操作:

1、設置窗體和自定義用戶控件的AutoScaleMode爲None
實現目標:禁止窗體因爲字體大小縮放變形
因爲顯示的高分屏,然後操作系統的設置了字體縮放引起的。窗體默認的AutoScaleMode = Font,控件會因爲高分屏自動縮放。
解決方法:設置窗體、用戶控件的AutoScaleMode = None
輸入圖片說明

2、設置app.manifest的dpiAware爲true
實現目標:禁止窗體因爲DPI縮放變形
選擇項目屬性,安全性
輸入圖片說明
選中 啓用 ClickOnce 安全設置,再取消選中。
這時候項目的文件裏就多了app.manifest
輸入圖片說明
按下面代碼修改,啓用dpiAware

  <!-- 指示該應用程序可感知 DPI 且 Windows 在 DPI 較高時將不會對其進行
       自動縮放。Windows Presentation Foundation (WPF)應用程序自動感知 DPI,無需
       選擇加入。選擇加入此設置的 Windows 窗體應用程序(面向 .NET Framework 4.6)還應
       在其 app.config 中將 "EnableWindowsFormsHighDpiAutoResizing" 設置設置爲 "true"。
       
       將應用程序設爲感知長路徑。請參閱 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
    </windowsSettings>
  </application>

  <!-- 啓用 Windows 公共控件和對話框的主題(Windows XP 和更高版本) -->
  <!--
 

3、設置DPIScale爲true
實現目標:DPI縮放後字體大小不變
確認編譯時DPI縮放爲100%
在主窗體上放置UIStyleManager控件
輸入圖片說明
設置DPIScale爲true
輸入圖片說明
編譯程序,在不同的DPI縮放下測試編譯好的SunnyUI.Demo.exe

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