2016-08-30 707 views
0

WPF應用程序通常是否可以在開箱即用的高DPI屏幕上正確縮放(沒有進一步定製清單等?)。這是我的理解他們做的?WPF應用程序模糊在Windows 10上的高DPI屏幕上

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

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

也可能值得一提的是,我在Windows副本上配置了「喜歡外部清單」註冊表設置,以允許每應用程序使用清單禁用高dpi縮放。 (即HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide "PreferExternalManifest"=dword:00000001)。

回答

1

任何依賴於PresentationCore的程序都會自動識別DPI。它需要an attribute to explicitly disable that

您肯定會遇到不同的問題,WPF應用程序不會自動支持每個監視器的dpi識別。自Windows 8.1以來可用的功能。在外部顯示器上顯示主顯示器很有可能,您可能會給它一個不同的DPI設置,現在您的筆記本電腦屏幕上的窗口被迫使用相同的DPI設置,除非他們明確選擇加入。 Takes a fair amount of gritty work。或者考慮簡單地將筆記本電腦的屏幕作爲主顯示屏,使用顯示器小程序來回切換很容易。

+0

嗨漢斯 - 感謝您的回答。看來增加多顯示器支持是我需要做的。 有趣的是,斷開低dpi(外部)顯示器在我嘗試之前沒有清除渲染 - 但是然後我想我只是在斷開連接後重新啓動機器(或至少註銷)監控。將筆記本電腦屏幕設置爲主顯示屏並沒有修復模糊渲染 - 直到我重新啓動(windows會警告某些應用程序在更改主顯示屏之前不會響應縮放更改,直到註銷爲止)。 –

+1

4.6.2根據Microsoft默認情況下,每個監視器都可以識別WPF應用程序。看到我的答案 – magicandre1981

1

.net 4.6.2 WPF應用程序啓動是每個監視器DPI知道默認情況下,不能在早期版本:現在

WPF應用被啓用每監視器DPI意識。這種改進對於將多個不同DPI級別的顯示器連接到一臺機器的情況至關重要。作爲全部或部分 WPF應用程序在監視器之間進行轉換,預期的 行爲適用於WPF自動將應用程序的DPI與 屏幕匹配。現在呢。 In previous versions, you would have to write additional native code在WPF應用程序中啓用每個監視器的DPI感知。

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

1

假設你運行的是一個足夠高的版本(根據另一個答案,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; 
    } 
相關問題