.NET MAUI 中控件阴影通过内置 Shadow 属性实现,支持 XAML 字符串(如“4 4 16 AliceBlue 0.5”)和 C# 对象两种设置方式,Image、Button、Frame、Border 等控件原生支持,Label 和 Entry 等则不支持。

在 .NET MAUI 中,给控件加阴影最直接的方式是使用 Shadow 属性 —— 它是所有 VisualElement 的内置可绑定属性,无需额外样式或自定义渲染器,开箱即用。
Shadow 属性的四个核心参数
Shadow 值是一个格式化字符串,按顺序指定:水平偏移、垂直偏移、模糊半径、颜色(可选透明度)。例如:
Shadow="4 4 16 AliceBlue 0.5"
- 4:水平偏移(正数向右,负数向左)
- 4:垂直偏移(正数向下,负数向上)
- 16:模糊半径(越大越虚化,默认为 10)
-
AliceBlue:阴影颜色(支持命名色、十六进制如
#87CEFA、RGB 等) - 0.5:可选的不透明度(0~1 之间,默认为 1)
支持 Shadow 的常用控件
不是所有控件都默认启用阴影渲染,但以下控件原生支持 Shadow 属性:
-
Image(如示例中的机器人图) -
Button(含ImageButton) -
Frame(注意:Frame 自带边框和背景,Shadow 会叠加在其外侧) -
Border(MAUI 7+ 引入,适合包裹内容并加阴影) - 自定义
ContentView或继承VisualElement的控件(只要没禁用渲染逻辑)
Label、Entry 等轻量控件默认不绘制阴影(无视觉层级需求),强行设置无效 —— 这是设计使然,不是 bug。
用 XAML 和 C# 两种方式设置
XAML 写法(推荐):
C# 代码设置(动态控制):
myImage.Shadow = new Shadow { Offset = new Point(0, 6), Radius = 12, Opacity = 0.125, Color = Colors.Black };
注意:C# 中需实例化 Shadow 对象,而 XAML 使用字符串语法更简洁;两者效果完全一致。
常见问题与避坑提示
- 阴影在某些平台(如 iOS)可能被父容器裁剪 —— 给父布局加
Padding或设ClipToBounds="False"(仅对Layout类有效) - 颜色带透明度时,推荐用
#AARRGGBB格式(如#4D000000表示 30% 黑),比单独写 Opacity 更可控 - 过度增大
Radius或Offset可能导致性能轻微下降,尤其在列表滚动中大量使用时 - 不能通过 CSS 设置 Shadow(MAUI 当前版本不支持
box-shadowCSS 属性)
基本上就这些。Shadow 是 MAUI 中少有“写完就见效”的视觉增强特性,参数少、逻辑直,用对了能快速提升界面质感。










