Windows UI 提供了许多美丽的效果、动画和区分方式。 但是,满足用户对性能和可自定义性的期望仍然是创建成功应用程序的必要部分。 通用 Windows 平台支持具有不同特性和功能的大型、多样化的设备系列。 为了为所有用户提供包容性的体验,需要确保您的应用程序能够适应不同设备并尊重用户的偏好。 UI 定制可以提供一种有效的方式来利用设备的功能,并确保一种令人愉快且包容的用户体验。
UI 定制是一个广泛的类别,包括针对以下方面的高性能、美观 UI 的工作:
- 尊重并适应用户的效果设置
- 适应用户对动画的设置
- 优化针对给定硬件性能的用户界面
在这里,我们将介绍如何使用上述区域中的视觉层定制效果和动画,但还有许多其他方法来定制应用程序,以确保出色的最终用户体验。 有关如何为各种设备 定制 UI 并 创建响应式 UI 的指南文档。
用户效果设置
用户可能会出于各种原因来自定义其 Windows 体验,应用程序应遵循和适应这些体验。 最终用户可以控制的一个方面是更改他们在系统中看到使用的效果类型。
透明度效果设置
用户可以自定义的效果设置之一是打开或关闭透明效果。 可在“设置”应用中找到“个性化”> 颜色,或通过“设置”应用 >“轻松访问”> 显示。
设置 中的“
启用后,使用透明度的任何效果都将按预期显示。 这适用于 Acrylic、HostBackdropBrush 或任何不完全不透明的自定义效果图。
关闭后,亚克力材料将自动回退到纯色,因为 XAML 的亚克力画笔默认已侦听此事件。 在这里,我们看到当未启用透明度效果时,计算器应用会适当地切换为纯色。
但是,对于任何自定义效果,应用程序都需要响应 UISettings.AdvancedEffectsEnabled 属性或 AdvancedEffectsEnabledChanged 事件,并切换出效果/效果图以使用没有透明度的效果。 下面是一个示例:
public MainPage()
{
var uisettings = new UISettings();
bool advancedEffects = uisettings.AdvancedEffectsEnabled;
uisettings.AdvancedEffectsEnabledChanged += Uisettings_AdvancedEffectsEnabledChanged;
}
private void Uisettings_AdvancedEffectsEnabledChanged(UISettings sender, object args)
{
// TODO respond to sender.AdvancedEffectsEnabled
}
动画设置
同样,应用程序应侦听和响应 UISettings.AnimationsEnabled 属性,以确保根据“设置”>“轻松访问 > 显示”中的用户设置打开或关闭动画。
public MainPage()
{
var uisettings = new UISettings();
bool animationsEnabled = uisettings.AnimationsEnabled;
// TODO respond to animations settings
}
利用功能 API
利用 CompositionCapabilities API,可以检测给定硬件上可用的组合功能以及性能,并定制设计,以确保最终用户在任何设备上获得高性能和美观的体验。 API 提供了一种检查硬件系统能力的方法,以便在各种硬件形态下实现平滑的性能缩放。 这样可以轻松适当地定制应用程序,以创建美观无缝的最终用户体验。
此 API 提供方法和事件侦听器,可用于为应用程序 UI 做出效果缩放决策。 该功能可检测系统如何处理复杂的组合和呈现作,然后以易于使用的模型返回信息,供开发人员使用。
使用组合功能
CompositionCapabilities 功能特性已经应用于诸如亚克力材料等功能中,其中材料会根据场景和硬件的不同条件,回退到性能更高的效果。
可以通过几个简单的步骤将 API 添加到现有代码。
在应用程序的构造函数中获取capabilities对象。
_capabilities = CompositionCapabilities.GetForCurrentView();
为应用注册已更改事件侦听器的功能。
_capabilities.Changed += HandleCapabilitiesChanged;
将内容添加到事件回调方法以处理各种功能级别。 这可能与下面的下一步类似,也可能不类似。
使用效果时,请先检查 capabilities 对象。 请考虑使用条件检查或 switch 控制语句,这取决于您想如何定制效果。
if (_capabilities.AreEffectsSupported()) { // Add incremental effects updates here if (_capabilities.AreEffectsFast()) { // Add more advanced effects here where applicable } }
可以在 Windows UI Github 存储库中找到完整的示例代码。
快速效果与慢效果
根据提供的 AreEffectsSupported 和 CompositionCapabilities API 中的 AreEffectsFast 方法的反馈,应用程序可以决定为为设备优化的其他效果交换昂贵或不支持的效果。 已知某些效果比其他效果消耗资源更大,应谨慎使用,而其他效果可以更随意地使用。 对于所有特效来说,在串联和动画化时应当注意,因为某些场景或组合可能会改变效果图的性能特征。 一些有关单个效果性能的经验法则:
- 已知对性能有较大影响的效果如下:高斯模糊、阴影掩码、BackDropBrush、HostBackDropBrush 和 Layer Visual。
(功能级别为 9.1-9.3)的低端设备不建议使用这些设备,应在高端设备上谨慎使用。 - 具有中等性能影响的效果包括颜色矩阵、某些混合效果 BlendModes(发光度、颜色、饱和度和色调)、SpotLight、SceneLightingEffect 和(具体取决于方案)BorderEffect。 这些效果可能在低端设备上的某些场景中有效,但在对其进行链式操作和动画处理时应谨慎使用。 建议将用途限制为不超过两个,并且仅在过渡时使用动画。
- 所有其他效果都具有较低的性能影响,并在动画和链接时在所有合理情况下都有效。