簡體   English   中英

Windows 10高DPI屏幕上的WPF應用程序模糊

[英]WPF Application Blurry on High DPI Screen on Windows 10

WPF應用程序是否可以在開箱即用的DPI高屏幕上正常縮放(無需進一步定制清單等?)。 據我了解他們這樣做了嗎?

在筆記本電腦屏幕上查看時,我編寫的兩個WPF應用程序在新筆記本電腦(運行Windows 10)上均顯得模糊。 通常,筆記本電腦的主要顯示器設置為外部低dpi顯示器,並且內置筆記本電腦面板的縮放比例為125%。 但是,無論是否插入了低dpi監視器,都會出現模糊。

我認為這可能與我的兩個應用程序的啟動方式有關(通過主方法,而不是啟動主窗口的默認代碼模板),但是我剛剛啟動了Visual Studio 2015並生成了一個全新的WPF帶有項目模板的應用程序(只是空白表單上的幾個單選按鈕),它在我的系統上也無法擴展為高DPI。

值得一提的是,我已經在Windows副本上配置了“首選外部清單”注冊表設置,以允許每個應用程序禁用清單的高dpi縮放。 (即HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\SideBySide "PreferExternalManifest"=dword:00000001 )。

.net 4.6.2開始,默認情況下,每個Monitor DPI都知道WPF應用程序,而不是早期版本:

現在已啟用WPF應用程序,以使每個監視器都能了解DPI。 對於將不同DPI級別的多個顯示器連接到一台計算機的方案,此改進至關重要。 由於WPF應用程序的全部或部分在監視器之間轉換,因此WPF的預期行為是將應用程序的DPI自動匹配到屏幕。 現在可以了。 在以前的版本中,您將不得不編寫其他本機代碼以在WPF應用程序中啟用每個監視器的DPI感知。

因此,請安裝.4.6.2開發工具,並將您的應用程序定位到4.6.2,以獲得對此的支持。

任何依賴於PresentationCore的程序都會自動識別DPI。 它需要一個屬性來顯式禁用該屬性

您肯定有其他問題,WPF應用程序不會自動支持每個顯示器的dpi意識。 從Windows 8.1開始可用的功能。 在外部顯示器上使用主顯示器非常有可能,您可能給了它不同的DPI設置,現在筆記本電腦屏幕上的窗口被迫使用相同的DPI設置,除非它們明確選擇加入。 承擔相當多的艱苦工作 或考慮簡單地將筆記本電腦的屏幕作為主要顯示屏,使用“顯示”小程序可以輕松地來回切換。

假設您正在運行足夠高的版本(根據另一個答案為4.6.2),則將執行以下操作。 我在Window.Current.Activate()之后不久運行它:

  double GetDpi()
    {
        var qualifiers = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues;
        double scale = 96;
        if (qualifiers.ContainsKey("Scale"))
        {
            string strScale = qualifiers["Scale"];
            double.TryParse(strScale, out scale);
        }
        return scale;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM