2011-05-08 81 views
3

我創建了一個簡單的Web瀏覽器WPF測試應用程序,畫布中有圖片和文本,窗口設置爲96dpi。WPF高DPI問題

然後我切換到120 dpi和: - (((Display是雜亂,圖象大小變更和畫布的一部分超出視圖...

當我使用的Winforms,我的AutoScaleMode屬性設置爲沒有和窗戶保持其大小,控件以及繼承字體的控件正確顯示,而不是模糊和不太大...

我該怎麼做,以模仿W¨這種(良好)的行爲? F?

回答

1

我不清楚你的意思是什麼「網絡瀏覽器WPF ...應用程序」。WPF不能在Web瀏覽器中運行,除非你在談論X BAP。或者你在做Silverlight嗎?或者它只是一個WPF導航應用程序,而不是基於瀏覽器?你需要澄清。

當您在高DPI模式下運行時,WPF會自動縮放您的內容。這是預期的行爲:如果用戶明確表示他們希望屏幕上的所有內容都更大,那麼WPF將尊重用戶的意願。 「假裝高DPI的舊WinForms黑客不存在,只是顯示一切正常的小尺寸,並希望它不會讓用戶過多」在WPF中不可用;如果你在工作的話,你可能會模仿他們,但你非常強烈地指導着做正確的事情。

WPF尺度所有內容,所以您的聲明「畫布的一部分不在視圖中」沒有任何意義。它應該縮放畫布,它的父窗口和它的子元素都相同,所以如果一切都適合96dpi,它也應該適合120dpi和144dpi。如果沒有,那麼你正在做一些奇怪的事情,你將不得不提供一個代碼樣本來重現問題。

您似乎聲稱在高DPI模式下運行時字體很模糊,這聽起來很奇怪。字體呈現爲矢量,所以它們應該乾淨地縮放,並且即使在高DPI模式下也能夠清晰呈現。我從來沒有見過你描述的模糊字體,所以你必須提供一個repro例子。

我期望模糊的唯一的事情就是圖像。如果您在用戶界面中使用光柵(位圖)圖像(BMP/GIF/JPG/PNG) - 例如,工具欄上的圖標 - 那麼是的,這些圖像在縮放時會顯得很糟糕。當你把一個小的位圖放大時,它總是看起來很糟糕。您可以嘗試通過使用更大的圖像並調整大小以便顯示來解決此問題 - 例如,如果您希望工具欄圖像爲16x16(當處於標準96 dpi模式下),那麼您可以嘗試將32x32位圖放入您的項目,在你的XAML中設置圖像元素的寬度=「16」和高度=「16」,並看看是否看起來更好。它實際上在120dpi模式下爲20x20物理像素,在144dpi模式下爲24x24,兩者仍然會從32x32資源中縮小,因此比起不得不放大的16x16源圖像有更好的拍攝效果。 (雖然我沒有在WPF工具欄中嘗試過這種技術,但我不知道它在實際工作中會如何使用典型的工具欄圖像。)

解決縮放問題的最佳方法圖像將使用矢量圖像而不是光柵。不幸的是,很難找到矢量圖像庫。它們很少,通常不如您可以找到的位圖圖像全面,而且通常很昂貴。

+0

喬,我在說xbap。儘管我完全意識到所有內容都是根據WPF中的120或144 dpi重新繪製的。對不起,模糊的字體,你是真的,那些封裝在位圖圖像中的字母......我的壞!也就是說,當您以96 dpi的分辨率繪製出適合整個屏幕的應用程序時,如果其他用戶使用144 dpi,他幾乎看不到您的應用程序。所以問題是:他是否必須使用滾動條或調整整個東西? – 2011-05-08 11:14:28

+0

因此,您正試圖對XBAP進行硬編碼,使其完全符合1024x768的屏幕?你正在進行一場艱苦的戰鬥。不同的用戶將擁有不同的瀏覽器版本,其中不同的工具欄和其他Chrome會佔用不同數量的垂直空間。他們將擁有不同的Windows設置(標題欄高度,任務欄高度,甚至任務欄停靠在顯示器的哪一側)。更不用說不同的屏幕分辨率和寬高比(例如寬屏寬屏不如高)。您最好使用WPF的佈局功能來設計一個可以正常調整大小的UI。 – 2011-05-08 13:31:49

1

假設您使用固定長度單位(px)。嘗試重新佈局您的項目,並牢記WPF佈局規則。 This頁面有一些最佳做法。

1

我剛剛發現在.NET 4使用MaxHeight WPF下,一個bug在得到由另一個樣式繼承和用作StaticResource,這並沒有得到由用戶設置的DPI影響的樣式設置。我將它從MaxHeight設置爲Height,然後它受到了DPI的影響。我懷疑.NET 4(也可能是其他框架)中的一個錯誤。