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

来源:https://www.cnblogs.com/yhuse/archive/2022/04/22/DPI.html
-Advertisement-
Play Games

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


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

SunnyUI.Net:C# .Net WinForm開源控制項庫、工具類庫、擴展類庫、多頁面開發框架;Sunny's blog:https://www.cnblogs.com/yhuse
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當你需要一個方法,可以簡便的遷移或複製虛擬環境到其他電腦上時,可以使用這個腳本一鍵創建虛擬環境並分享給你的朋友。 ...
  • Java集合中設計了一個介面Java.util.Map,它實現類中hashMap、hashTable、TreeMap、ConcurrentHashMap、LinkedHashMap。 Map類型的集合用來做鍵值對存儲的,也就是key-value形式的。所以不允許鍵重覆,值是可以重覆的。 hashMa ...
  • 來源:blog.csdn.net/weixin_44912855 最近微信群里一個網友分享了他京東一面的過程,我這裡分享給大家其中一道面試題。 京東一面」子線程如何獲取父線程ThreadLocal的值 子線程如何獲取父線程ThreadLocal的值 想要子線程獲取父線程中 ThreadLocal 中 ...
  • Python 是一種極其多樣化和強大的編程語言!當需要解決一個問題時,它有著不同的方法。在本文中,將會展示列表解析式 (List Comprehension)。我們將討論如何使用它?什麼時候該或不該使用它? 列表解析式的優勢 •比迴圈更節省時間和空間。 •需要更少的代碼行。 •可將迭代語句轉換為公式 ...
  • 概述 目前主流的網路數據分析工具主要有兩類,一類是http協議分析工具,如fiddler,這類工具擅長對字元串類型協議分析;另一類是原始網路數據包的監聽分析,如Wireshark,這類工具擅長分析網路底層行為。這兩類工具一類擅長字元串協議分析,另一類擅長網路底層行為分析,但是上述兩類工具分析二進位流 ...
  • 微信開放平臺:微信掃碼登錄功能 官方文檔:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 1. 授權流程說明 微信OAuth2.0授權登錄讓微信用戶使用微信身份安全登錄 ...
  • 《零基礎學Java》 資料庫操作 資料庫基礎 資料庫是一種存儲結構,允許使用各種格式 輸入、處理、檢索 數據,且不用在每次需要數據時重新輸入數據。 select 語句: select語句用於查詢數據表中的數據。 select 語句 語法: select 所選欄位列表 from 數據表名 where ...
  • 在Python的應用實踐過程中,經常會遇到字元串使用的問題,我花了點時間,專門整理了 Python 關於 string 的知識,主要內容 包括以下幾個方面: 為了方便以後查看,速查表的形式整理了 Python字元串的內容,《Python字元串速查表》(V1.0版)一共 5 頁,先來一 張圖看下概覽哈 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...