回到 Vista 首次发布时,以及 WPF 版本 3.0 上,使用内置放大镜进行缩放实际上会进行基于矢量的缩放。
这在 WPF 3.5 服务包 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 Update 完成,
从 .NET 3.5 sp1 开始,MIL 位于名为 wpf_gfx_vXXXX.dll 的不同 DLL 中,其中 vXXXX 是版本号。在 .NET 4.0 中,它是 wpf_gfx_v0400.dll。
好处是 WPF 可以在每个新版本中添加新的渲染功能,而无需更新 Windows 本身。缺点是 WPF 的渲染不再像 Vista 发布时那样与 Windows 紧密集成。结果是,正如你所见,放大不再像以前那么有趣了。