簡體   English   中英

分辨率獨立性如何在WPF中起作用?

[英]How resolution independence work in WPF?

這更多是出於好奇。 我正在研究WPF應用程序是獨立於分辨率的。 這是否意味着我們不必擔心顯示器分辨率的大小? 因為作為Windows應用程序開發人員,我遇到了一些挑戰,使應用程序兼容不同的分辨率。

我的問題是WPF如何管理獨立於分辨率的屬性? 我們是否需要提供出現控制的比率? 如果用作背景(如果它在高分辨率下扭曲或保持其清晰度),圖像的質量將如何影響?

請幫忙。 這可能是項目的決定性因素。

據我所知,WPF使用Buttons的矢量圖形而不是像舊版WinForms那樣的Bitmaps。 因此,WPF可以輕松調整大小並適應不同的屏幕分辨率。 我對背景圖像等沒有直接經驗,但如果它們是基於像素的,我會提供比96 DPI所需的更高分辨率,可能是兩倍高? 這應該保證,他們在更高的分辨率下看起來並不差。

實際應用說明:WPF應用程序總是可讀的,並且在我迄今為止嘗試的所有顯示器上看起來都很好。 但是如果使用更小的分辨率來顯示為更大分辨率開發的程序,則可能會遇到固定對象的問題。 例如,將文本框定義為某個最小尺寸,而不是占用太多可用屏幕。 所以我覺得最好定義盡可能少的約束,然后在運送產品之前測試其他顯示器上的應用程序,因為它總是可讀的,但你可能會發現一些可用的問題。

WPF和解決方案獨立性的關鍵在於它使用與設備無關的單元並使用它來正常使用系統dpi設置('大字體'等); 因此,例如,如果您正在將系統設置為默認的96 dpi,並繪制96個單位寬的文本框,WPF知道這是一個邏輯英寸。 如果您然后將分辨率更改為144 dpi,WPF將使用144個物理像素繪制文本框。 所有的GUI元素都像這樣完美地擴展。 如果您使用Winforms GUI嘗試相同的操作,您將看到它無法正確擴展 - 您最終會在小文本框中使用大字體等

ETA解決這個問題的另一種方法是澄清分辨率的含義 - 我猜1024 x 768實際上是'屏幕大小,以像素為單位',96dpi更准確地說是實際分辨率,而且它改變了這一點,WPF可以正確處理其他平台別; 如果您只需將800 x 600更改為1024 x 768,Winforms等和WPF都將正確顯示。

WPF是基於矢量的,包含許多強大的布局功能,以確保縮放在任何設備上都能很好地工作(簡單而強大的Grid控件是我最喜歡的一個)。 它基本上使用一種測量和布置系統,確保兒童控制器知道他們需要多少空間,因此可以相應地調整自己的尺寸

話雖如此,由UI設計師確保應用程序布局是可擴展的,因為通過設置顯式大小等仍然可以創建硬編碼的固定,非流體布局

如果確實發生這種情況,則可以縮放整個UI(通過使用變換和其他方法),這將具有放大/縮小的效果,具體取決於應用程序是針對更大還是更小的分辨率。 這樣做的缺點是,如果沒有為這種縮放設計,任何非矢量內容(如位圖)都會看起來像塊狀或失真

總而言之,WPF並沒有直接管理任何分辨率獨立性,但是通過使用一些簡單的布局概念,可以制作獨立於分辨率的UI而無需使用縮放(類似於在WinForms中使用錨定......但更好)

一個小例子:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100">
        <ColumnDefinition Width="auto">
        <ColumnDefinition Width="*">
        <ColumnDefinition Width="2*">
    </Grid.ColumnDefinitions>
</Grid> 

這將創建一個雙列網格布局,其中第一列是100個單位的固定寬度,第二列僅占用足夠的空間以適合其子控件,第四列按比例占據第三列空間的兩倍。 這些列將拉伸以完全填充其父容器,即屏幕的一小部分區域或完整窗口。

這可以通過測量可用空間的大小來實現,使第一列固定為100個單位,使第二列成為其中的子控件的大小,然后計算出剩余的空間並將其划分為其他列基於它們的比率。 (星號*之前的數字是每個動態大小的列應占用的空間比例。 *它本身相當於1*

這與標准的Margin和對齊屬性幾乎允許任何可以想象的布局......這只是一個控件!

編輯:

我可能會補充一點,雖然大多數人不使用愚蠢的分辨率,但令人驚訝的是有多少人仍在運行1024x768或運行寬屏中分辨率顯示器,其垂直分辨率低於800像素,因此唯一可以確定的方法是去測試!

問題1:我的問題是WPF如何管理獨立於分辨率的屬性?

來自MSDN:
與分辨率無關且與設備無關的圖形。 WPF圖形系統中的基本測量單位是與設備無關的像素,無論實際的屏幕分辨率如何,都是1/96英寸,為獨立於分辨率和與設備無關的渲染提供了基礎。 每個與設備無關的像素會自動縮放以匹配其渲染的系統的每英寸點數(dpi)設置。

問題2:如果用作背景,圖像的質量將如何影響(它會以高分辨率扭曲還是保持清晰度)?

我想這主要取決於給定圖片的質量。 高質量的圖像在縮放時不會松動。

我建議閱讀以下文章:

WPF簡介你會發現wpf比依賴的分辨率更多(DataBinding,布局,樣式,模板,2D,3D,動畫....)

成像概述 WPF圖形渲染概述

暫無
暫無

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

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