WinUI Expander展开时Header出现阴影,如何配置或禁用该效果?
问题原因
你遇到的是WinUI 1.0.0-preview3版本的已知渲染Bug,根源是控件默认自带的ThemeShadow(主题阴影)在非全圆角/非对称圆角场景下的裁剪计算逻辑出错:
- 当控件的
CornerRadius所有角的值一致且不为0,或者所有角都为0时,阴影裁剪逻辑正常 - 当
CornerRadius存在部分角为0、或者四个角的圆角值不对称时,阴影没有被正确裁剪,就会漏出多余的阴影边缘。该问题和你手动设置的Shadow属性无关,这个属性控制的是自定义阴影,不会影响系统默认的主题阴影。
解决方案
方案1(优先推荐):升级WinAppSDK版本
该Bug在WinAppSDK 1.0.1及之后的正式版本中已经被官方修复,你只需要将项目依赖的Microsoft.WindowsAppSDK包升级到最新稳定版即可直接解决问题。
方案2(临时兼容方案,适用于无法升级版本的场景)
如果暂时不能升级SDK版本,可以根据你的需求选择下面的适配方法:
- 禁用控件默认主题阴影:在对应控件的样式中显式设置
Translation = "0,0,0"即可,WinUI默认主题阴影是基于控件Z轴偏移值渲染的,Z轴设为0就不会生成默认阴影。针对Expander可以直接重写ExpanderHeader的样式添加该配置,针对Button可以直接在Button标签上添加该属性。 - 裁剪多余阴影:如果需要保留阴影效果,可以给控件外层套一个和控件背景色一致的
Border,将Border的CornerRadius设为和内部控件一致,同时开启ClipToBounds="True",就能把漏出的多余阴影裁剪掉。 - 显式清空阴影配置:直接在控件上设置
Shadow="{x:Null}",也可以强制禁用所有阴影效果。
内容的提问来源于stack exchange,提问作者RekiDunois
相关产品推荐
相关产品推荐

