Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
Wpf分辨率独立性和本机分辨率_Wpf - Fatal编程技术网

Wpf分辨率独立性和本机分辨率

Wpf分辨率独立性和本机分辨率,wpf,Wpf,WPF文档和教程说明WPF与分辨率无关,据我所知,它以不同的分辨率(1600x1200->本机和1024x768)和/或DPI设置显示相同大小的窗口。然而,当我尝试一个示例应用程序时。分辨率不同,尺寸也不同。在网上,我发现了一种使用“本机分辨率”以便在不同的计算机上看到相同的窗口大小的方法,但我无法理解其基本概念 为什么LCD的本机分辨率至关重要,分辨率独立性是一个术语而不是DPI独立性?也许,我不太了解/使用术语,但我需要澄清才能理解这个问题。我不想回答我自己的问题,但我想我明白了。对不起,这

WPF文档和教程说明WPF与分辨率无关,据我所知,它以不同的分辨率(1600x1200->本机和1024x768)和/或DPI设置显示相同大小的窗口。然而,当我尝试一个示例应用程序时。分辨率不同,尺寸也不同。在网上,我发现了一种使用“本机分辨率”以便在不同的计算机上看到相同的窗口大小的方法,但我无法理解其基本概念


为什么LCD的本机分辨率至关重要,分辨率独立性是一个术语而不是DPI独立性?也许,我不太了解/使用术语,但我需要澄清才能理解这个问题。

我不想回答我自己的问题,但我想我明白了。对不起,这个问题提得太早了,但过了一会儿我注意到了这个问题

据我所知,WPF使用系统DPI(通过Windows桌面设置更改设置)作为比例因子。例如,在上面的教程中,其中一台计算机的本机分辨率为1600x1200和96 DPI(如教程中所述,实际分辨率为94)。一切都很好,因为系统DPI(96)非常接近真实DPI(94),WPF可以使用此信息缩放窗口

如您所知,独立于设备的单位为1/96英寸,其数字大于实际像素大小(屏幕上的物理像素)乘以等于1的((1/96)*96)。所以,如果你有一个300 DIU的窗口,那么你会在屏幕上看到(300/96)英寸

然而,当您在不更改系统DPI的情况下更改分辨率时,出现了一个困扰我的问题。比方说,您将屏幕分辨率设置为1024x768,而不更改系统DPI(仍然是96),然后再次运行应用程序,您会看到一个更大的窗口。这是错误的系统DPI和WPF的自然错误比例因子的要求。WPF不太了解您真正的DPI,它只使用您提供给它的信息,即系统DPI。让我们用这个新设置重新计算窗口大小。首先我们需要的比例因子是((1/96)*96)等于1。我们可以说,1个逻辑像素也是屏幕上的1个物理像素。但是,我们改变了分辨率,300像素与以前的分辨率不一样。之前我们在对角线上有1600个像素,长度也为17英寸。然而,我们现在17英寸有1024像素。300像素在我们的新分辨率(1024x768)上几乎是5英寸,但在以前的分辨率(1600x1200)上只有3.18英寸。因此,由于DPI值错误,WPF不能独立于分辨率,并使用新分辨率绘制更大的窗口

因此,我如何解决这个问题(用我的话说,我并不认为这是一个绝对的解决方案)!当我改变分辨率时,我也改变了DPI值,这对于这个新的分辨率是正确的。例如,对于我自己的显示器,对角线大小为17英寸,分辨率为1024x768,我使用公式(1024像素/17英寸),发现我新的真实DPI几乎为60 DPI。我将系统DPI设置为60(当然是通过桌面设置),它可以工作。由于计算过程中的舍入误差,这并不完美,但在实践中,可以认为数值相等

WPF使用系统DPI以独立于分辨率,您需要设置实际DPI(当前分辨率的实际DPI值)。您需要设置DPI以帮助WPF实现无分辨率。最后(我认为非常关键的是)您还需要做一件事,至少在Windows XP上,您需要重新启动,以便使用新值启用DPI设置。如果你不这样做(就像我做的那样),WPF仍然会做错误的计算并绘制不同的尺寸

这些是我的理解和测试结果,但我不能说它们是绝对的。我只想和那些可能觉得这些信息有用的人分享一下。如果您发现任何错误或认为需要改进,请评论/编辑我的帖子