You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何设置Acrylic在UWP应用失去焦点时不关闭?

解决UWP应用失焦时Acrylic效果被关闭的问题

先看看你遇到的场景:

应用聚焦时的Acrylic效果:
UWP app聚焦时的Acrylic效果

应用失焦时的默认行为(切换到回退色):
UWP app失焦时的回退色效果

完全理解你的感受——Acrylic作为Fluent Design里的核心亮点,失焦就丢失透明效果确实破坏了视觉连贯性。好在我们可以通过Composition API手动创建Acrylic背景,绕过系统默认的失焦切换逻辑,让效果一直保持。

具体实现步骤

方法:使用Composition API创建持久化Acrylic背景

系统默认的AcrylicBrush会在窗口失焦时自动切换到回退色,这是系统内置的性能优化逻辑。而通过Composition层手动创建的Acrylic效果不受这个限制,以下是具体代码实现:

  1. 在你的页面后台代码(比如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,效果会略有不同但同样能保持失焦时的透明效果。
  • 样式匹配:调整TintColorTintOpacity参数可以完全匹配你原本使用的Acrylic样式,确保视觉效果一致。

补充说明

系统默认关闭失焦应用的Acrylic效果,主要是出于性能考虑——减少后台应用的资源消耗。但通过手动创建Composition层的Acrylic,我们可以强制保留效果,满足你的视觉设计需求,同时只要参数设置合理,对性能的影响也在可控范围内。

内容的提问来源于stack exchange,提问作者Jai Sharma

火山引擎 最新活动