我已经开发了使用WPF的随机应用程序的GUI。我在应用程序窗口上放置了一堆盒子WPF控件。我没有定制任何东西,没有使用位图等。

在Windows 7中使用放大镜应用程序运行我的应用程序和缩放时(Win key + Plus key, ,放大的GUI显示像素。我可能错了,因为我无法解释,但不是WPF应该提供的 矢量喜欢 控制渲染?

感谢您参加讨论。

奖励阅读

有帮助吗?

解决方案

回到Vista首次发货时,以及WPF在3.0版上时,使用内置放大镜的缩放实际上将进行基于矢量的缩放。

当WPF 3.5服务包1发货时,这停止工作。 (它在SP1之前的3.5起作用。)它在此之前工作的原因是DWM(桌面窗口管理器) - 窗口的一部分负责在屏幕上显示所有内容 - 使用milcore.dll进行渲染。 WPF的3.0版和3.5版也使用了相同的组件来渲染 - 这意味着所有WPF内容都是本地内容。 (实际上,在没有DWM的Windows XP上,Milcore.dll是WPF在您的系统上为自己的好处所投入的东西。但是它内置在Vista和Windows 7中。在Vista上呈现,DWM所应用的任何效果(例如缩放)也将适用于您想要的WPF的方式 - 它确实确实在没有像素化的情况下进行了缩放。

不幸的是,情况不再如此。原因是WPF开始添加新的渲染功能。在3.5 SP1中,所讨论的新功能是对自定义像素着色器的支持。为此,Microsoft必须发布对MIL的更新。 (媒体集成层 - 实际渲染的位。)但是,它们并不能够更新milcore.dll,因为这是Windows的一部分 - 这是您在屏幕上看到的所有内容都在屏幕上。释放新版本的milcore.dll有效地意味着向Windows推出更新。 Windows的发布时间表与.NET无关,因此WPF团队合理添加新功能的唯一方法是运送新的MIL。 (从理论上讲,他们可以通过Windows更新来完成此操作,但是由于WPF现在由Microsoft与Windows不同的部门拥有,因此在实践中似乎并没有发生这种事情。)

从.NET 3.5 SP1开始,MIL在不同的DLL中,称为WPF_GFX_VXXXXXXXXXXXXXXX,其中VXXXX是版本号。在.NET 4.0中,它是WPF_GFX_V0400.dll。

好处是WPF可以在每个新版本中添加新的渲染功能,而无需更新Windows本身。不利的一面是,WPF的渲染不再像窗户那样紧密地集成到窗户时,它在Vista发货时短暂地回到了。正如您所看到的那样,结果的放大并不像以前那么有趣。

其他提示

放大镜应用程序实现了自己的缩放图像渲染,因此这就是为什么您会看到像素的原因。 WPF确实使用向量图形,但是在这种情况下,呈现缩放图像的不是WPF应用程序本身。

如果您使用类似的东西 史努比 您可以在作用中看到缩放和缩放的WPF矢量图形。

我想,Windows 7放大镜在屏幕UI上拍摄了实际应用程序的快照,然后将其放大(不为WPF应用程序提供特殊情况)。当然,它可以访问的只是像素,而不是在场景后面工作的矢量图形。

Windows-7-Magnifier是基于像素的,但是放大镜模式有差异,具体取决于Aero-theme是否有效。

  • 使用Areo主题,变焦是像素化的。
  • 没有Areo主题,缩放是平滑的(模糊)。

只有AREO主题其他视图(“停靠”除外)才能选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top