我不想回答我自己的問題,但我想我明白了。對不起這個過早的問題,但過了一段時間,我發現了這個問題。
就我所知,WPF使用System DPI(通過更改Windows桌面設置來設置)作爲縮放因子。例如,在上面的教程中,其中一臺計算機的原始分辨率爲1600x1200和96 DPI(實際上,本教程中指出了94)。一切都很好,因爲系統DPI(96)非常接近真正的DPI(94),並且WPF可以使用這些信息來縮放窗口。
如您所知,設備無關單元爲1/96英寸,並且數字大於實際像素大小(屏幕上的物理像素)乘以等於1的((1/96)* 96)。如果你有一個300 DIU的窗口,那麼你將在屏幕上看到(300/96)英寸。
但是,如果在不更改系統DPI的情況下更改分辨率,則會出現令我困惑的問題。假設您將屏幕分辨率設置爲1024x768而不更改系統DPI(仍爲96),然後再次運行應用程序,您會看到更大的窗口。這是錯誤的系統DPI和WPF自然錯誤的比例因子的要求。 WPF不太瞭解您的真實DPI,它只使用您提供給系統DPI的信息。我們用這個新設置重新計算我們的窗口大小。首先我們需要((1/96)* 96)等於1的比例因子。我們可以說1個邏輯像素在屏幕上也是1個物理像素。但是,我們改變了分辨率,300像素與以前的分辨率不一樣。以前我們在對角線上有1600像素,也是17英寸長。但是,我們現在有17英寸1024像素。在我們的新分辨率(1024x768)下,300像素幾乎爲5英寸,而在以前的分辨率(1600x1200)下僅爲3.18英寸。因此,由於DPI值錯誤,WPF不能獨立於分辨率,並且會在新分辨率下繪製更大的窗口。
所以,我如何解決這個問題(用我的話來說,我不認爲這是一個絕對的解決方案)!當我改變分辨率時,我也改變了這個新分辨率的DPI值。例如,對於我自己的顯示器,對角線尺寸爲17英寸,分辨率爲1024x768,我使用公式(1024像素/ 17英寸),發現我的新真DPI接近60 DPI。我將系統DPI設置爲60(當然通過桌面設置)並且它可以工作。由於計算過程中的舍入誤差,這並不完美,但在實踐中,值可以被認爲是相等的。
WPF使用系統DPI以獨立解決問題,您需要設置實際的DPI(當前分辨率的實際DPI值)。您需要設置DPI以幫助WPF免費解析。最後(我認爲非常關鍵)你至少在Windows XP上做了一件事,你需要重新啓動才能使用新值啓用DPI設置。如果你不這樣做(就像我一樣),WPF仍然會計算錯誤,並繪製不同的大小。
這些是我對我所做的測試的理解和結果,但我不能聲稱它們是絕對的。我只想與可能會發現此信息的人分享。請發表評論/編輯我的帖子,如果您發現任何錯誤或認爲需要改進。