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

15

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

在编码之前,我都是在Adobe Illustrator中设计我的应用程序,尽管我尝试将所有尺寸设置为Illustrator文件中的尺寸,但Silverlight应用程序通常会更大。

4个回答

30

虽然从理论上讲,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报告物理像素大小 - 这是因为它们不知道。

因此,这个问题没有可靠的答案 - 在屏幕上,1个WPF单位可以是任何东西。(实际上,在大多数情况下,它往往是1个像素,因为如果您不告诉Windows其他信息,它默认假定您的屏幕的像素高度为1/96英寸,这与1 WPF单位相同。对于大多数桌面屏幕而言,这实际上很可能是一个好猜测。但这并非普遍适用的。例如,在配置了所谓的“大字体”的系统上,您将找到不同的名义屏幕分辨率,1个WPF单位将对应略大于1个物理像素 - 实际上约为1.2像素。)

对于打印机,一切都更可预测。打印机通常能够正确报告它们的分辨率。因此,如果您打印96个WPF单位高的东西,您可以相信它将高1英寸。

1
不错的描述。我使用了一个双显示器连接笔记本电脑的设置。笔记本电脑是 Vaio VPCF2,每英寸有134个物理像素。外部显示器是HP 2310m,每英寸95.7个像素。如果我将标签宽度设置为96,则在HP上显示为1.25英寸。如果我将其设置为134,则在Vaio上显示为1.25英寸。因此,我必须通过0.8来缩放我的期望像素密度,以便在自己的显示器上显示为1英寸。这取决于我期望它显示在哪个显示器上。但实际上,我并不是真的很在意,所以我最终还是选择了96作为“足够接近”。 - cod3monk3y

20

MSDN的文档说明FrameworkElement.Height属性(适用于Silverlight)是指:

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

然而,对于WPF,它指的是:

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

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


设备无关单位。 - Liviu Mandras
我需要在Illustrator中调整我的设置。我一直在使用像素来处理所有的东西,但对于文本来说不太适用。这里有关于WPF和Silverlight的更多信息:http://msdn.microsoft.com/en-us/library/cc903925(VS.95).aspx - Quentamia
1
FYI:微软使用96 ppi。Adobe Illustrator使用72 ppi。 - Quentamia

2

文档中提到的是像素,但这些像素是每英寸96个像素。在120 DPI显示器上显示宽度为96的线条将会是实际设备像素数为120。同样,在具有600 DPI打印输出的打印机上绘制的线条将长达600个像素。


1

它们是设备无关单位

您可以在这里找到更详细的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接