SunnyUI.Net, 基於 C# .Net WinForm 開源控制項庫、工具類庫、擴展類庫、多頁面開發框架 Blog: https://www.cnblogs.com/yhuse Gitee: https://gitee.com/yhuse/SunnyUI GitHub: https://git ...
-
SunnyUI.Net, 基於 C# .Net WinForm 開源控制項庫、工具類庫、擴展類庫、多頁面開發框架
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