Silverlight和WPF使用哪些测量单位?

时间:2010-11-03 13:13:35

标签: wpf silverlight xaml units-of-measurement

有谁知道Silverlight / WFP使用的测量单位是什么?例如,如果我创建一个新按钮并将其高度设置为150,那是150像素吗?点?毫米?

在继续编写代码之前,我在Adobe Illustrator中设计了所有应用程序,虽然我尝试将所有内容设置为Illustrator文件中的维度,但Silverlight应用程序通常更大。

4 个答案:

答案 0 :(得分:26)

虽然在理论中,WPF中的1个单位是1/96英寸,但实际上并非如此。

打印时通常都是如此。但它在屏幕上很少真实。原因是Windows几乎总是知道打印机的真实分辨率,但几乎从不知道屏幕的真实分辨率。

例如,我有三个屏幕连接到我的电脑。 Windows认为它们都具有每英寸96像素的分辨率。实际上他们没有。其中两个分辨率为每英寸101像素,其中一个分辨率为每英寸94像素。 (为什么?因为Windows没有办法为自己设计真正的分辨率,而且我没有告诉它。它们都具有相同像素大小的小说接近真相,结果证明是一个方便的小说。 )

因此,当我在WPF中创建一个矩形,宽度和高度都设置为96时,矩形的大小实际上取决于它出现在哪个屏幕上。 Windows认为所有3个屏幕的分辨率均为每英寸96像素,因此无论它出现在哪个屏幕上,它都会将矩形渲染为96像素高和宽。这将使其在两个屏幕上看起来高0.95英寸,在第三个屏幕上高出1.02英寸。

所以在实践中,这意味着我这台计算机上的WPF中的单位要么是1/100英寸,要么是1/94英寸。 (即,实际上,无论像素有多大,WPF中1个单位的大小正好是我特定设置中的1个像素的大小。)

我可以改变它。我可以重新配置Windows - 我可以告诉它所有3个屏幕的实际分辨率,在这种情况下,名义和实际WPF单位大小将重合。或者我可以撒谎 - 我可以声称我每英寸屏幕有200像素,在这种情况下,一切都会很大......

这里的基本问题是计算机没有标准的方法来发现屏幕上物理像素的真实大小,很少有人费心去手工设置它。 (事实上​​,你可以通过“正确”配置它来引发问题,因为当你这么做时,许多软件的行为都不正确。)因此,大多数Windows计算机都没有正确地向WPF报告物理像素大小 - 他们可以'因为他们不知道。

因此,对这个问题没有可靠的答案 - WPF中的1个单元几乎可以在屏幕上显示任何内容。 (实际上,大部分时间,它都是1像素,只是因为如果你不告诉Windows其他任何东西,它默认假设你的屏幕有1/96英寸高的像素,这是与1 WPF单元相同。对于大多数桌面屏幕,实际上很可能是一个很好的猜测。但这不是通用的。例如,在配置了以前被称为“大字体”的系统上,你会发现一个不同的标称屏幕分辨率,1个WPF单元将对应略多于1个物理像素 - 实际上大约为1.2。)

使用打印机,它更具可预测性。打印机总是能够正确报告其分辨率。因此,如果您打印96个WPF单位高的东西,您可以确信它会高1英寸。

答案 1 :(得分:19)

MSDN的文档指出FrameworkElement.Height属性(对于Silverlight)是指:

  

对象的高度(以像素为单位)

但是,for WPF指的是:

  

与设备无关的单位(1/96英寸)测量值

因此,回答你的问题...... 像素适用于Silverlight,设备无关单位适用于WPF。

答案 2 :(得分:1)

它们是设备无关单元

您可以找到更详细的解释here.

答案 3 :(得分:1)

文档是指像素,但这些像素是每英寸有96个这样的像素。当在120 DPI显示器上显示时,宽度线96将是120个实际设备像素。类似地,在打印机输出上绘制的具有600 DPI的这条线将是600像素长。