天天看點

ModernUI教程:獨立顯示器DPI感覺

         獨立顯示器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來實作:

ModernUI教程:獨立顯示器DPI感覺

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教程:目錄