2011-10-29 18 views
0

我可以找到的所有文檔以及我做的每一個搜索都會不斷斷言,在Silverlight中,當您將FontHeight設置爲像素高度時,同樣對於LineHeight,在例如。一個TextBlock。但在實踐中,這根本不是真的:當我使用普通字體(如Lucida Sans Unicode)將字體高度(和行高度)設置爲22時,行之間的實際高度爲33像素。 (實際上,33和一小部分。)爲什麼Silverlight聲稱字體高度是以像素爲單位的,當它不是?

爲了解決這個問題,我試着做我在Java applets中做過的事情:使用字體指標來詢問我的文本實際上有多高。我發現的唯一方法是將示例文本渲染到屏幕外的TextBlock中,對其進行測量並查看它有多高。它返回了一個非常方便的答案:32像素。

請注意,這幾乎是正確的。屏幕上的TextBlock將字體渲染爲33像素高,而屏幕外渲染的像素高32像素。測量我的文本的唯一方法是將屏幕上的「屏幕外」塊準確地顯示出來,透明並且在屏幕上顯示。然後測量返回33.

我在這裏錯過了什麼?爲什麼大家都說高度是以像素爲單位的,但是我發現這裏的數字代表以像素半爲單位測量的實際高度,而且確切比例取決於控件是否是活動頁面的一部分或者是分離和自給自足?我不瞭解什麼?

添加註釋:我意識到一行文本佔用的高度與實際字形高度之間的差異。但是同樣的說明字體高度的文檔也是以像素爲單位的,也就是說行高是以像素爲單位的,並且默認與字體高度相同。這顯然意味着字體高度應該包括所有使用的垂直空間,而不僅僅是字形高度。


最後一點:我想我到底問題是,我一直運行到誤傳有關Silverlight,然後忘了,我讀它,所以我把它夾雜了準確的信息。就像,我在哪裏看到畫布延伸以保持其內容?它沒有。

+0

字體是在印刷點測量的網格。沒有人會說像素。 – vorrtex

+0

以下各頁均以「像素」表示: http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.fontsize%28v=VS.95%29.aspx http://msdn.microsoft.com/en-us/library/cc189010%28vs.95%29.aspx –

回答

2

Here是「字體大小」概念的一些解釋。

我已經創建了大小爲200像素的文本示例。黃色矩形具有200個像素的尺寸太:

<Rectangle Height="200" Width="96" Fill="Yellow" /> 
<TextBlock FontSize="200" FontFamily="Arial" Text="ÂSj" /> 

enter image description here

  • 的Ascent(A的高度)= 180個像素,

  • 下降(空間下方的和S)= 50像素,

  • 內部領先(上面的迴旋曲線)= 30 像素

  • 字體高度=上升+下降= 180 + 50 = 230個像素

  • 字體大小=字體高度 - 內部前導= 230 - 30 = 200個像素

正如所看到的,實際200像素字體的高度是230像素。相應地,22像素的字體具有實際高度33像素。

結論:上面的字母重音不包括在字體大小,但它們都包含在字體高度

+0

那麼爲什麼哦爲什麼Silverlight文檔聲明,默認情況下,LineHeight等於FontSize?我明確地將LineHeight以及FontSize設置爲22,並將其顯示爲33.或者說,對於33和一小部分......執行準確的度量需要使用浮點。 –

+0

你可能會問,當它出現在33像素時,字母的高度是多少?這是..... 18.下行者怎麼樣? 21.所以也許這是在正確的場地,但是LineHeight應該與FontSize大不相同。 –

+0

@PaulKienitz據說「基於FontSize的有效線高度加上偏移量」。但實際上,此屬性用於多行文本框,並且根本不會更改文本大小。請參閱本文中的備註部分:http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.lineheight%28v=vs.95%29.aspx – vorrtex

相關問題