首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wpf分辨率独立性和本机分辨率

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

Stack Overflow用户
提问于 2014-07-25 00:21:52
回答 1查看 238关注 0票数 3

WPF文档和教程指出,WPF是独立于分辨率的,据我所知,它显示了不同分辨率(1600x1200 ->和1024x768)和/或DPI设置下相同大小的窗口。然而,当我尝试一个示例应用程序时。不同的分辨率大小是不同的。在网上,我找到了http://www.wpflearningexperience.com/?p=41,它使用“本地分辨率”,以便在不同的计算机上看到相同的窗口大小,但是我不能理解其基本概念。

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

EN

回答 1

Stack Overflow用户

发布于 2014-07-25 14:50:59

我不想回答我自己的问题,但我想我明白了。很抱歉这个过早的问题,但过了一段时间我注意到了这个问题。

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

如你所知,设备独立单元是1/96英寸,并且大于实际像素大小(屏幕上的物理像素)的数字乘以( ( 1 / 96 ) *96)等于1。因此,如果你有一个300DIU的窗口,那么你的屏幕上将看到( 300/96 )英寸。

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24939098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档