和Winform不同,WPF的度量單位不是像素,而是設備無關單位DIU,其大小總是1/96吋
那麽,WPF中一個寬度爲96的按鈕,到底是多少個像素呢?
答:取決於系統DPI。
計算公式爲:實際像素 = 設備無關尺寸*系統DPI
這樣,在系統DPI爲96時(windows默認值),按鈕正好占用96像素;而系統DPI爲120時,將占用120個像素
像素尺寸有了,再已知屏幕DPI,就可以推算出物理尺寸了。
而屏幕DPI取決於屏幕尺寸和分辨率。
比如:12.5吋筆記本,1366*768的屏幕DPI約125dpi;18.5吋臺式機,1366*768的屏幕DPI約85dpi
不難算出,96像素在筆記本上的長度小於1吋,而在臺式機上會大於1吋
通常LCD顯示器有個自然分辨率,在該分辨率下顯示效果最佳,所以屏幕DPI可以説是固定的,設備出廠時就已經決定了。
姑且把屏幕DPI稱爲硬DPI(不大會變),而前面的系統DPI爲軟DPI(可以在控制面板中修改)。
説了這麽多,WPF度量系統的優勢在哪呢?
答:如果衹用默認的系統DPI,WPF的度量系統和Winform相比沒有優勢。因爲此時WPF的度量單位等同于像素,兩者的表現完全一樣。
不過當改變系統DPI的時候,WPF的優勢就體現出來了。
例如:當系統DPI增加到120時,WPF會自動增加像素尺寸,以顯示更多的細節,直觀上就是控件變大了,細節更清楚了
而此時Winform的尺寸卻沒法自動變化,還是老樣子,雖然系統提供了更高的像素密度,但Winform卻無法顯示更多的細節。
不過WPF的這種方式有時也會帶來問題,比如:指定窗口的寬度爲1366,在默認的系統DPI下沒問題,但如果增加系統DPI,該窗口會超出屏幕範圍。
此時反倒是winform的固定像素方式不會出問題,所以孰優孰劣也要看場合。
WPF度量系統