15

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

在开始编写代码之前,我在 Adob​​e Illustrator 中设计了所有应用程序,尽管我尝试将所有内容设置为 Illustrator 文件中的尺寸,但 Silverlight 应用程序通常更大。

4

4 回答 4

29

尽管理论上,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 报告物理像素大小 - 他们可以' t 因为他们不知道。

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

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

于 2010-11-04T18:13:57.530 回答
20

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

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

但是,对于 WPF,它指的是:

独立于设备的单位(1/96 英寸)测量

因此,回答您的问题... Silverlight的像素,WPF的设备独立单元

于 2010-11-03T13:17:53.033 回答
2

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

于 2010-11-03T13:22:34.077 回答
1

它们是独立于设备的单元

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

于 2010-11-03T13:16:28.137 回答