现在可以在非 UWP 桌面应用程序中使用Windows 运行时 API 来增强WPF、Windows 窗体和 C++ Win32 应用程序的外观、感觉和功能,并利用只能通过 UWP 使用的最新Windows UI 功能。
对于许多方案,可以使用 XAML 岛 向应用添加新式 XAML 控件。 但是,当需要创建自定义体验(超出内置控件)时,可以访问视觉层 API。
视觉层为图形、效果和动画提供高性能、保留模式 API。 它是跨 Windows 设备 UI 的基础。 UWP XAML 控件是基于视觉层构建的,它支持 Fluent Design System 的多方面特性,例如光照、深度、运动、材料和缩放。
使用视觉层创建的用户界面
在任何Windows应用中创建具有视觉吸引力的用户界面
借助视觉层,可以使用自定义绘制内容(视觉对象)的轻型组合,以及对应用程序中这些对象应用强大的动画、效果和操作,从而创建引人入胜的体验。 视觉层不会替换任何现有的 UI 框架;相反,这是对这些框架的宝贵补充。
可以使用视觉层为应用程序提供独特的外观,并建立一个标识来将其与其他应用程序分开。 它还支持 Fluent Design 原则,这些原则旨在使应用程序更易于使用,从而吸引更多的用户参与度。 例如,可以使用它创建视觉提示和动画屏幕切换,以显示屏幕上项之间的关系。
视觉层功能
刷子
使用合成画笔 ,可以使用纯色、渐变、图像、视频、复杂效果等绘制 UI 对象。
影响
合成效果 包括光线、阴影和筛选效果列表。 它们可以进行动画处理、自定义和链接,然后直接应用于视觉对象。 SceneLightingEffect 可与合成照明相结合,以创建气氛、深度和材料。
在 Windows UI 组成示例库中演示的光源和材料。
动画
合成动画 直接在合成器进程中运行,独立于 UI 线程。 这可确保平滑度和缩放性,因此可以运行大量并发显式动画。 除了熟悉的关键帧动画来推动属性更改随时间推移,还可以使用表达式在不同属性(包括用户输入)之间设置数学关系。 输入驱动动画使你能够创建动态且流畅地响应用户输入的 UI,这可能会导致用户参与度更高。
动画效果在 Windows UI 合成示例库 中进行了演示。
保留现有代码库并增量采用
现有应用程序中的代码表示你不想失去的重大投资。 你可以迁移内容 岛 以使用视觉层,并将 UI 的其余部分保留在其现有框架中。 这意味着你可以对应用程序 UI 进行重大更新和增强,而无需对现有代码库进行大量更改。
示例和教程
了解如何通过试验示例在应用程序中使用视觉层。 这些示例和教程可帮助你开始使用视觉层,并展示功能的工作原理。
Win32
Windows 窗体
WPF
使用 WPF 的视觉层教程 - Visual 层集成示例
- 屏幕捕获例子
Limitations
虽然许多视觉层功能在桌面应用程序中托管时的工作方式与在 UWP 应用中相同,但某些功能确实存在限制。 以下是需要注意的一些限制:
- 效果链依赖于 Win2D 获取效果说明。 桌面应用程序中不支持 Win2D NuGet 包,因此需要从 source code 重新编译它。
- 要进行命中测试,您需要自行遍历视觉树来计算边界。 这与 UWP 中的视觉层相同,但在这种情况下,没有 XAML 元素可以轻松绑定以进行命中测试。
- 视觉层没有用于呈现文本的基元。
- 当两种不同的 UI 技术一起使用(如WPF和视觉层)时,它们都负责在屏幕上绘制自己的像素,并且不能共享像素。 因此,视觉层内容始终呈现在其他 UI 内容之上。 这被称为 空域 问题。您可能需要进行额外的编码和测试,以确保视觉层内容会随着主机 UI 调整大小,并且不会遮挡或覆盖其他内容。
- 在桌面应用程序中托管的内容不会自动按 DPI 调整或缩放。 为了确保您的内容能够适应 DPI 的变化,可能需要采取额外的步骤。 (有关详细信息,请参阅特定于平台的教程。
其他资源
API 参考