MAUI 的 CarouselView 是内置轮播控件,支持手势滑动、循环播放与数据绑定;需通过 ItemsSource 绑定数据、ItemTemplate 定义模板、CurrentItem/position 控制当前页,并可搭配 IndicatorView 实现页码指示。

MAUI 的 CarouselView 是专为轮播场景设计的原生控件,不依赖第三方库,开箱即用。它适合展示图片、卡片、引导页等线性内容,支持手势滑动、自动定位、循环播放和数据绑定——关键在于理解它的核心属性和绑定逻辑。
基础结构与数据绑定
CarouselView 本身不渲染内容,需配合 ItemTemplate 定义每项样式。数据源通过 ItemsSource 绑定,通常是 IEnumerable 或 ObservableCollection:
- XAML 中设置
ItemsSource="{Binding ImageUrls}",ViewModel 提供字符串列表或自定义模型 -
ItemTemplate内用Image控件加载图片,支持Aspect="AspectFill"等缩放控制 - 避免在模板中写死尺寸,让 CarouselView 自动适配容器宽度
控制交互行为
几个布尔属性直接决定用户能否操作以及如何响应:
-
IsSwipeEnabled="True"(默认)启用左右滑动手势;设为False就只能靠代码跳转 -
Loop="True"(默认)开启首尾连通,滑到最后一张再右滑会回到第一张 -
IsBounceEnabled="False"可关闭 ios/android 滚动越界回弹效果,界面更克制 - 如需禁用所有交互,同时设
IsSwipeEnabled="False"和InputTransparent="True"
获取和控制当前页
轮播图不只是“播”,还要“知道播到哪”和“能跳到哪”:
- 读取当前项:
CurrentItem返回绑定集合中的实际对象(比如当前图片 URL) - 监听变化:绑定
CurrentItemChangedCommand或订阅CurrentItemChanged事件 - 主动跳转:设置
Position属性(从 0 开始的索引),或调用ScrollTo()方法(支持动画和对齐选项) - 注意:
CurrentItem和Position是双向绑定的,改一个另一个自动同步
搭配指示器(IndicatorView)
单独用 CarouselView 没有页码提示,需手动加 IndicatorView 并绑定同步:
- 把 IndicatorView 放在 CarouselView 外部或内部 StackLayout 中
- 设置
IndicatorView.ItemsSource="{Binding Source={RelativeSource AncestorType={x:Type CarouselView}}, Path=ItemsSource}" - 绑定
IndicatorView.Position="{Binding Source={RelativeSource AncestorType={x:Type CarouselView}}, Path=Position}" - 可自定义指示点样式,比如用
IndicatorView.IndicatorSize="12"和IndicatorView.IndicatorColor="LightGray"
基本上就这些。不需要装额外 NuGet 包,.net MAUI 6+ 已内置完整支持。重点是理清 ItemsSource → ItemTemplate → CurrentItem/Position 这条链,其余都是围绕它做增强。