Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight和WPF使用什么测量单位?_Wpf_Silverlight_Xaml_Units Of Measurement - Fatal编程技术网

Silverlight和WPF使用什么测量单位?

Silverlight和WPF使用什么测量单位?,wpf,silverlight,xaml,units-of-measurement,Wpf,Silverlight,Xaml,Units Of Measurement,有人知道Silverlight/WFP使用什么测量单位吗?例如,如果我创建一个新按钮,并将其高度设置为150,这是150像素吗?积分?毫米 在继续编写代码之前,我在Adobe Illustrator中设计了所有应用程序,尽管我尝试将所有内容设置为Illustrator文件中的维度,但Silverlight应用程序通常更大 它们是设备独立的单元 您可以找到更详细的解释MSDN的文档说明该属性(对于Silverlight)指的是: 对象的高度(以像素为单位) 但是,它指的是: 设备独立单位(1/96

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


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

它们是设备独立的单元


您可以找到更详细的解释

MSDN的文档说明该属性(对于Silverlight)指的是:

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

但是,它指的是:

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


所以,要回答你的问题像素对于Silverlight,设备独立单元对于WPF。

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

虽然理论上,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单元相同。对于大多数桌面屏幕,这实际上很可能是一个很好的猜测。但这不是通用的。在syste上ms配置了以前被称为“大字体”的字体,例如,您会发现不同的标称屏幕分辨率,1个WPF单位将对应略多于1个物理像素-实际上大约1.2。)


有了打印机,一切都变得更加可预测。打印机总是能够正确地报告其分辨率。所以,如果你打印的东西是96 WPF单位高,你可以确信它会是1英寸高。

不是皮克斯。独立于设备的装置。我必须在Illustrator中使用我的设置。除了文字,我一直在使用像素。这里有一些关于WPF和Silverlight的更多信息供参考:微软使用96 ppi。Adobe Illustrator使用72 ppi。描述良好。我有一个双显示器和一台笔记本电脑。笔记本电脑是一款每英寸134个物理像素的Vaio VPCF2。外部显示器为HP 2310m,95.7 ppi。如果将标签宽度设置为96,则HP上显示为1.25英寸。如果将其设置为134,则Vaio上显示为1.25英寸。因此,我必须将我的预期ppi放大0.8,以使它在我的显示器上精确显示为1”。这取决于我希望它显示在哪个显示器上。但实际上,我并不在乎,所以我还是选择96作为“足够接近”的参数。