獨立顯示器DPI感覺,是在Windows 8.1中新增的特性,這個特性針對擁有多個顯示器同時各個顯示器的DPI設定又不同的人。對這個新特性做了優化支援的軟體能夠在一個高DPI的顯示器移動視窗到另一個低DPI的顯示器的時候實作完美自适應,反之亦然,自動适應對應的顯示器的DPI。而對于不支援這個新特性的軟體,哪怕是已經針對DPI調整做了優化的軟體,系統都會利用DPI虛拟化來對軟體界面進行像素拉伸放大或縮小(實際上放大與縮小采取了2種不同的方式,具體我就不說了),進而适應不同顯示器的DPI。
支援:
在Windows 8.1之前,獨立顯示器DPI感覺并不存在,作業系統提供了一個系統DPI,WPF自動支援。
在1.0.6版本以後,當作業系統支援時,Modern UI将會自動啟用獨立顯示器DPI感覺功能。新基類DpiAwareWindow實作了所有擴充到目前顯示器DPI設定所必需的功能。ModernWindow和ModernDialog都派生自DpiAwareWindow。
要求:
ModernUI應用程式支援獨立顯示器DPI感覺有兩個要求:
1、顯然主機作業系統必須是Windows 8.1或更高版本。如果ModernUI應用程式運作的作業系統不支援獨立顯示器DPI感覺,它就會自動轉切換到SystemDPI感覺,這是WPF的預設設定。
2、為了在程序中啟用PerMonitorDpiAwareness,它必須被初始化為DPI unaware。這可以通過在你的應用程式中添加以下代碼到AssemblyInfo.cs來實作:

DPI API:
ModernUI公開的API可以用來查詢目前的DPI設定。
DpiAwareWindow
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教程:目錄