如何设置Acrylic在UWP应用失去焦点时不关闭?
解决UWP应用失焦时Acrylic效果被关闭的问题
先看看你遇到的场景:
应用聚焦时的Acrylic效果:
应用失焦时的默认行为(切换到回退色):
完全理解你的感受——Acrylic作为Fluent Design里的核心亮点,失焦就丢失透明效果确实破坏了视觉连贯性。好在我们可以通过Composition API手动创建Acrylic背景,绕过系统默认的失焦切换逻辑,让效果一直保持。
具体实现步骤
方法:使用Composition API创建持久化Acrylic背景
系统默认的AcrylicBrush会在窗口失焦时自动切换到回退色,这是系统内置的性能优化逻辑。而通过Composition层手动创建的Acrylic效果不受这个限制,以下是具体代码实现:
- 在你的页面后台代码(比如
MainPage.xaml.cs)中,添加以下代码:
using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; public MainPage() { this.InitializeComponent(); // 初始化持久化Acrylic效果 EnablePersistentAcrylic(); } private void EnablePersistentAcrylic() { // 获取页面的Compositor实例 var compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; // 创建DesktopAcrylicBackdrop(适用于Windows 10 1809及以上版本) var acrylicBackdrop = compositor.CreateDesktopAcrylicBackdrop(); // 自定义Acrylic的色调和透明度,根据你的应用风格调整参数 acrylicBackdrop.TintColor = Windows.UI.Color.FromArgb(255, 30, 30, 30); acrylicBackdrop.TintOpacity = 0.6f; // 可选:设置回退颜色(仅当Acrylic真的无法渲染时才会触发,比如旧系统环境) acrylicBackdrop.FallbackColor = Windows.UI.Color.FromArgb(255, 30, 30, 30); // 将Acrylic背景应用到页面的视觉层上 ElementCompositionPreview.SetElementChildVisual(this, acrylicBackdrop); }
关键注意事项
- 兼容性:这个方法要求应用的目标版本至少是Windows 10 1809(Build 17763),如果需要兼容更早版本,可以将
DesktopAcrylicBackdrop替换为AcrylicBackdrop,效果会略有不同但同样能保持失焦时的透明效果。 - 样式匹配:调整
TintColor和TintOpacity参数可以完全匹配你原本使用的Acrylic样式,确保视觉效果一致。
补充说明
系统默认关闭失焦应用的Acrylic效果,主要是出于性能考虑——减少后台应用的资源消耗。但通过手动创建Composition层的Acrylic,我们可以强制保留效果,满足你的视觉设计需求,同时只要参数设置合理,对性能的影响也在可控范围内。
内容的提问来源于stack exchange,提问作者Jai Sharma






