默認情況下,大多數Windows窗體應用程序不支持DPI。實際上,大多數Windows應用程序都不是DPI。所以,你需要選擇加入DPI意識在您的應用程序清單:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"
xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
由於DPI意識是每個進程中,VS設計師對這個問題上沒有選擇 - 它的Visual Studio,這是內運行DPI知道。
儘管如此,確保所有的一切都適用於低DPI和高DPI。 DPI意味着「我將正確處理所有DPI縮放,無需爲我僞造;謝謝。」希望你已經通過適當的自動縮放和佈局設計你的表單,或者使用獨立於設備的單元而不是像素:)
當你的應用程序沒有聲明被DPI識別時,Windows假定你是一個遺留應用程序,不能正確處理DPI。所以爲了防止出現問題,假裝您實際上正在渲染一個較小的顯示器 - 在您的情況下,尺寸只有一半,然後將產生的曲面恢復到適當的尺寸。這導致了模糊,尤其是對於文本,但確保了所有內容都具有適當的尺寸和比例 - 例如,你不會得到比它們中的文本更小的按鈕,或者重疊的控件。
如果使用正確的佈局方法,Windows窗體和WPF都可以正確處理DPI,因此.NET絕對支持DPI。但是它們都能夠很好地識別DPI,大多數應用程序仍然忽略DPI問題,所以默認情況與其他Windows應用程序相同。由於沒有「傳統WPF」應用程序,並且執行WPF的最簡單方式也是DPI,因此WPF的默認項目模板已經包含聲明DPI認知的清單,所以我假設您在Windows窗體中創建了項目:)實際上,鑑於Windows現在如何演變,您可能希望擁有程序集清單,以正確管理所有兼容性功能:)
要獲得額外的獎勵,當有多個顯示器具有不同的DPI時,會出現更多問題 - 要聲明正確支持,你會使用<dpiAware>true/PM</dpiAware>
。這隻適用於Windows 8.1+,並且正確實施可能非常棘手。