Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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_Winforms - Fatal编程技术网

WPF决议独立性

WPF决议独立性,wpf,winforms,Wpf,Winforms,可能重复: 监视器和系统DPI的分辨率与WPF分辨率独立性之间有什么区别。 更改两者之间的内容可以使WPF中的窗口大小保持不变,这在之前的User32中是不可能的? 编辑: 我正在读的书《C Sharp中的Pro WPF》说,如果我们在96 DPI中创建一个1英寸的按钮,然后再将DPI更改为120,由于像素密度更高,按钮会变小(在winforms中)。但我尝试过,我可以看到,在这两种情况下,按钮大小保持不变 为什么会这样?事实上,WPF所谓的分辨率独立性并不能让您完成以前在Win32中做不到的

可能重复:

监视器和系统DPI的分辨率与WPF分辨率独立性之间有什么区别。
更改两者之间的内容可以使WPF中的窗口大小保持不变,这在之前的User32中是不可能的?
编辑: 我正在读的书《C Sharp中的Pro WPF》说,如果我们在96 DPI中创建一个1英寸的按钮,然后再将DPI更改为120,由于像素密度更高,按钮会变小(在winforms中)。但我尝试过,我可以看到,在这两种情况下,按钮大小保持不变


为什么会这样?

事实上,WPF所谓的分辨率独立性并不能让您完成以前在Win32中做不到的任何事情。只是以前的工作要多得多。所以这里唯一真正的变化是开发工作——基本能力没有变化。(事实上,WPF中的所有内容都是如此。如果您有几年的开发时间,您可以通过直接针对DirectX API编程来完成WPF所做的一切…)

WPF自动考虑标称DPI配置。在Win32中,如果您希望应用程序对标称DPI敏感,则必须编写额外的代码来实现这一点,如果您希望避免诸如文本被某些DPI剪切之类的问题,则必须处理各种可怕的布局问题。(虽然现在我们在.NET4中有了GDI32样式的文本呈现,但您可以选择返回WPF应用程序中的所有这些问题…)

所以你的问题的答案基本上是:没有区别。WPF使考虑DPI变得更加容易,但它在这里不支持任何新的行为

从根本上说,WPF遇到的问题与经典Win32应用完全相同,原因很简单,因为它可以访问与经典Win32应用完全相同的信息。正如其他答案中链接的页面所讨论的,Windows通常不知道DPI到底是什么。大多数情况下,它会告诉您显示器的分辨率是96dpi。我的电脑上连接了3个屏幕,Windows报告了所有屏幕的96dpi,尽管没有一个屏幕是真正的96dpi,实际上它们甚至都不是相同的dpi

底线是:Windows通常不知道屏幕的真实DPI是什么。WPF对此无能为力。如果WPF有办法发现真正的DPI,Win32应用程序也可以发现它