獨立顯示器DPI感知,是在Windows 8.1中新增的特性,這個特性針對擁有多個顯示器同時各個顯示器的DPI設定又不一樣的人。對這個新特性作了優化支持的軟件可以在一個高DPI的顯示器移動窗口到另外一個低DPI的顯示器的時候實現完美自適應,反之亦然,自動適應對應的顯示器的DPI。而對於不支持這個新特性的軟件,哪怕是已經針對DPI調整作了優化的軟件,系統都會利用DPI虛擬化來對軟件界面進行像素拉伸放大或縮小(實際上放大與縮小採起了2種不一樣的方式,具體我就不說了),從而適應不一樣顯示器的DPI。html
支持:windows
在Windows 8.1以前,獨立顯示器DPI感知並不存在,操做系統提供了一個系統DPI,WPF自動支持。
在1.0.6版本之後,當操做系統支持時,Modern UI將會自動啓用獨立顯示器DPI感知功能。新基類DpiAwareWindow實現了全部擴展到當前顯示器DPI設置所必需的功能。ModernWindow和ModernDialog都派生自DpiAwareWindow。優化
要求:操作系統
ModernUI應用程序支持獨立顯示器DPI感知有兩個要求:
一、顯然主機操做系統必須是Windows 8.1或更高版本。若是ModernUI應用程序運行的操做系統不支持獨立顯示器DPI感知,它就會自動轉切換到SystemDPI感知,這是WPF的默認設置。
二、爲了在進程中啓用PerMonitorDpiAwareness,它必須被初始化爲DPI unaware。這能夠經過在你的應用程序中添加如下代碼到AssemblyInfo.cs來實現:3d
DPI API:orm
ModernUI公開的API能夠用來查詢當前的DPI設置。htm
DpiAwareWindowblog
DpiInformation屬性
公開當前的DPI settings.教程DpiChanged事件和OnDpiChanged方法
當屏幕上的DPI 設置發生改變時被渲染。重寫OnDpiChanged或處理DpiChanged事件來監視DPI的變化。例如你能夠載入高/低DPI圖像資源。進程ModernUIHelper
包含輔助方法用於獲取和設置當前進程的DPI感知。
GetDpiAwereness方法
查詢當前進程的DPI掛不照顧。返回DpiUnaware,SystemDpiAware或PerMonitorDpiAware
TrySetPerMonitorDpiAware方法
試圖設置DPI感知爲PerMonitorDpiAware。當主機操做系統不支持PerMonitorDpiAware時,將採用SystemDpiAware。進程中最初的DPI感知必須成功設置爲DpiUnaware。任何失敗的操做都會被丟棄,返回值標識操做是否成功。
該方法由DpiAwareWindow內部使用,不須要顯式地調用這個方法。
ModernUI的獨立顯示器DPI感知的實現很大程度上是基於MSDN上的文章:開發一個Per-Monitor DPI-Aware WPF應用程序。
傳送門:ModernUI教程:目錄