我正在使用 WPF 开发一个新的 C# 应用程序。我的印象是 WPF 是基于矢量的,并且文本/按钮将以独立于分辨率的方式绘制。运行我的应用程序时,很明显我的应用程序不是使用矢量绘制的。一些文本变得相当块状,当使用窗户放大镜时,您可以看到所有内容的粗糙边缘。
在我的应用程序中是否需要做一些特殊的事情来打开矢量绘图?还是我的特定机器有问题?(我正在使用最新的图形驱动程序运行 Windows Vista x64)
我打算将此添加为评论,但我希望它被正确引用和脚注。
Windows Vista 中的 Mangifier 辅助功能工具曾经支持 WPF。如果您放大 WPF 内容,您会看到应用程序的清晰放大版本 - 证明 WPF 确实是基于矢量的。
微软的技术传播者 Tim Sneath在 2006 年发表了一篇关于此的博客:

2011 年 6 月 25 日:原始图像消失了。替换为另一个显示相同效果的图像。
Greg Schechter在这个博客上回答了一些评论者,解释说放大镜不再有这个技巧。放大镜会专门检测 WPF 应用程序,并知道如何要求它们进行缩放。他们在放大镜中删除了对 WPF 的依赖。似乎放大镜依赖于 WPF 中他们想要带走或贬低的某些东西:
'bp' 和 'Joseph Cooney' 都注意到,使用内置的 OS Magnifier 放大 WPF 内容不再对内容进行分辨率无关的缩放。
这个观察是正确的。
由于一系列变化太多而无法在此描述,操作系统放大镜不再是“WPF-aware”,而是像处理其他内容一样进行位图缩放。尽管我们确实失去了此功能,但我们相信,如果没有使 Magnifier 能够以特定于 WPF 的方式工作的依赖项,我们可以更加灵活地向 WPF 客户提供向前发展的内容。
请注意,以上仅与过程外放大有关。当您在自己的 WPF 应用程序中进行缩放(通过缩放)时,渲染会继续以更高的比例重新光栅化,因此在最常见的场景中一切都保持流畅。此更改严格与使用外部放大镜有关。
所以放大镜曾经有它,但现在没有了。
在第 9 频道的视频“ Greg Schechter:Windows Presentation Foundation(WPF) 体系结构”中,Greg Schechter 谈到了放大镜如何用于提供此功能。
放大镜和 DWM 一起工作。放大镜修改了 DWM 场景图,使其客户区实际上指向场景图的桌面根。DWM 然后知道放大镜在那里,并且知道如何避免可怕的“将摄像机指向显示摄像机的电视”的效果。
编辑:2018 年 9 月 7 日。从伊恩格里菲斯的回答:
回到 Vista 首次发布时,以及 WPF 3.0 版时,使用内置放大镜进行缩放实际上会进行基于矢量的缩放。
当 WPF 3.5 Service Pack 1 发布时,这停止工作。(它在 sp1 之前的 3.5 中工作。)在那之前它工作的原因是 DWM(桌面窗口管理器) - Windows 的一部分,负责呈现您在屏幕上看到的所有内容 - 使用 MILCORE.DLL 进行渲染。WPF 3.0 和 3.5 版也使用相同的组件来呈现 - 这意味着所有 WPF 内容都是本机内容,可以这么说。(实际上,在没有 DWM 的 Windows XP 上,MILCORE.DLL 是 WPF 出于自身利益而放在您系统上的东西。但它内置于 Vista 和 Windows 7 中。)当 WPF 使用 MILCORE.DLL 时在 Vista 上渲染,由 DWM 应用的任何效果(例如缩放)也将适用于您希望 WPF 的方式 - 它确实在没有像素化的情况下进行了缩放。
不幸的是,情况不再如此。原因是 WPF 开始添加新的渲染功能。在 3.5 sp1 中,有问题的新功能是支持自定义像素着色器。为了实现这一点,微软必须发布 MIL 的更新。(媒体集成层——进行实际渲染的部分。)然而,他们并没有真正能够更新 MILCORE.DLL,因为那是 Windows 的一部分——这就是你在屏幕上看到的所有内容都在屏幕上的方式。发布新版本的 MILCORE.DLL 意味着将更新推送到 Windows。Windows 的发布计划与 .NET 的发布计划无关,因此 WPF 团队合理添加新功能的唯一方法是发布新的 MIL。(理论上他们可以通过 Windows 更新来完成,
从 .NET 3.5 sp1 开始,MIL 位于名为 wpf_gfx_vXXXX.dll 的不同 DLL 中,其中 vXXXX 是版本号。在 .NET 4.0 中,它是 wpf_gfx_v0400.dll。
好处是 WPF 可以在每个新版本中添加新的渲染功能,而无需更新 Windows 本身。缺点是 WPF 的渲染不再像 Vista 发布时那样与 Windows 紧密集成。结果是,正如你所看到的,放大不像以前那么有趣。
| 归档时间: |
|
| 查看次数: |
2226 次 |
| 最近记录: |