Windows phone 7 里silverlight的点与像素 (Points and Pixels in silverlight)
Silverlight 中的所有尺寸都是以像素为单位,FontSize也不例外。
当你定义FontSize = "36"时,意味着你得到了一个字体,这个字体从字母上沿到字母下沿的尺寸是36个像素。
传统上,字体尺寸是以点(Points)为单位的。在经典的凸版印刷中,一个点非常接近于1/72英寸,但是在数字印刷中,点经常被假定成确定的1/72英寸。
一个大小为72点的字体从字符顶端至底端大约是1英寸。
如何在像素和点之间转换?显然你不能将特殊的输出设备除外。例如在一个每英寸600 dot(600DPI)的打印机上,72点的字体将会有600像素高。
我们如今使用的桌面视频输出设备的分辨率通常在100DPI的范围以内,例如,21寸显示器可以显示水平方向1600像素,垂直方向1200像素。
所以,斜对角线上是2000像素,除以21,大约就是95DPI.
默认情况下,微软windows假定视频显示设备是96DPI, 在这个假设下,字体尺寸和像素是有以下方程式中的关系的:
points = 3/4 * pixels
pixels = 4/3 * points
这种关系仅适用于通常的视频显示设备。
当你设置FontSize = "36"时,你也可以设置为27-point 的字体。但是在TextBlock里实际上高度将更像48像素。比FontSize大约高出33%,这些称为leading的多余的部分,防止
了多个文本行之间形成相互干扰。
当处理windows phone 7等设备上的高分辨率屏幕时,字体大小的问题变得更加复杂。480*800像素显示屏,在大约4又2分之1寸屏幕上斜对角的像素为933,密度大约200DPI,
大约是普通分辨率的两倍。
当运行在Web浏览器里时,默认的silverlight字体大小是11像素,即8.25points, 对于桌面显示来说很好了,但是对于手机来说就小了点。因此,windows phone的silverlight定义了
一个通用字体大小集合供使用。
标准的MainPage.xaml文件在根元素下面包含了下面的属性:
FontSize = "{StaticResource PhoneFontSizeNormal}"
这个FontSize会影响所有的TextBlock控件而不会设置他们自己的FontSize属性。它是20个像素,几乎相当于默认桌面silverlight的FontSize的一倍。
使用标准的方程式,这个20像素的FontSize对应于15points, 但是实际在手机上显示时,大概只有打印文本的15points的一半大小。
TextBlock里显示的文本的实际高度大约比FontSize大33%,所以大概是27像素。