MAUI 的 SwipeView 是原生支持 ios、android 和 windows 触控的侧滑菜单控件,需注意平台行为差异(如 windows 不支持鼠标拖拽)、Drag/Reveal 动画模式设置、SwipeItems 方向限制及 SwipeStarted/Changing/Ended 事件 监听。

MAUI 的 SwipeView 是实现侧滑菜单(比如左滑删、右滑标记)最直接的控件,它不依赖第三方库,原生支持 iOS、Android 和 Windows(触控模式),用法清晰但有几个关键点容易踩坑。
基础结构:内容 + 轻扫项
SwipeView 本质是一个“包装器”——它包裹一个主内容(如 Label、StackLayout),再通过 LeftItems/RightItems/TopItems/BottomItems 添加可触发的菜单项。Content 属性是隐式内容属性,不用写 Content= 标签。
- 只允许一个直接子元素作为 Content(如不能直接放多个 Label,需用 StackLayout 包一层)
- 每个方向最多一组 SwipeItems,每组可含多个 SwipeItem(例如右滑弹出“标记”和“归档”两个按钮)
- SwipeItem 支持 Text、IconImageSource、BackgroundColor、Command/CommandParameter,还能响应 Invoked 事件
平台行为差异必须注意
SwipeView 在不同系统上默认交互逻辑不同,尤其 Windows 只响应触控,鼠标拖拽无效;iOS 和 Android 还提供两种展开动画模式:
- Reveal(默认):轻扫时内容不动,菜单项像“帘子”一样从边缘渐显
- Drag:轻扫时整个内容区域被拖动,菜单项随动滑入(更接近原生 iOS 邮件体验)
- XAML 中启用 Drag 模式需加平台特定 命名空间,例如 iOS:
ios:SwipeView.SwipeTransitionMode="Drag" - C# 中调用:
swipeView.On<ios>().SetSwipeTransitionMode(SwipeTransitionMode.Drag)</ios>
常用交互控制技巧
除了用户手动滑动,你还可以用代码控制开关状态或监听过程:
- 调用
swipeView.Open(OpenSwipeItem.Left)或.Close()主动展开 / 收起 - 监听
SwipeStarted、SwipeChanging、SwipeEnded三个事件,其中 SwipeEndedEventArgs 提供IsOpen(是否最终打开了)和SwipeDirection - 设置
Threshold属性(double 类型)可调整触发完全展开所需的滑动距离,默认约 0.5,值越小越灵敏 - 若想禁止某个方向滑动,直接不定义对应 Items(比如没设 RightItems,就无法右滑)
实际小例子:左滑删除条目
在 ListView 或 CollectionView 的 DataTemplate 中嵌入 SwipeView,是最典型场景:
<SwipeView> <SwipeView.LeftItems> <SwipeItems> <SwipeItem Text=" 删除 " IconImageSource="delete.png" BackgroundColor="red" Invoked="OnDeleteInvoked"/> </SwipeItems> </SwipeView.LeftItems> <Label Text="{Binding Title}" VerticalOptions="Center" /> </SwipeView>
后台 C# 中处理删除逻辑即可,注意 Invoked 事件里可通过 sender 或绑定上下文获取当前数据项。
基本上就这些。用好 SwipeView 不复杂,但得记清平台限制、动画模式选择和事件触发时机——特别是别在 Windows 上指望鼠标拖拽生效。