在.NET MAUI穿戴设备(Wear OS/iOS手表)中选择数字的合适控件咨询
适配Wear OS/iOS手表的数字选择方案
一、使用原生平台适配的控件
Wear OS(Android)
直接用Android原生的NumberPicker控件——就是你提到的闹钟场景里的滚动选数控件,天生适配小屏幕。在MAUI里可以通过自定义Handler绑定原生控件:
- 在Android项目中创建自定义视图,设置数字范围:
public class WatchNumberPicker : NumberPicker { public WatchNumberPicker(Context context) : base(context) { MinValue = 0; MaxValue = 60; WrapSelectorWheel = false; } }
- 在MAUI项目中定义对应的共享视图:
public class WatchNumberPickerView : View { }
- 在
MauiProgram中注册Handler映射:
.ConfigureMauiHandlers(handlers => { #if ANDROID handlers.AddHandler<WatchNumberPickerView, WatchNumberPickerHandler>(); #endif })
- 实现Handler逻辑:
public class WatchNumberPickerHandler : ViewHandler<WatchNumberPickerView, WatchNumberPicker> { protected override WatchNumberPicker CreatePlatformView() { return new WatchNumberPicker(Context); } }
iOS Watch
iOS Watch原生的WKPickerControl是专为手表设计的滚动选数控件,同样通过MAUI Handler集成:
- 在iOS项目中创建自定义控件:
public class WatchNumberPicker : WKPickerControl { public WatchNumberPicker() { var items = Enumerable.Range(0, 61).Select(i => new WKPickerItem { Title = i.ToString() }).ToArray(); SetItems(items, 0); } }
- 重复MAUI端的视图定义与Handler注册步骤,即可在XAML中直接使用。
二、自定义Picker的选择UI
如果不想单独开发原生控件映射,也可以直接修改MAUI Picker的原生表现:
Android端替换为NumberPicker
通过自定义Handler替换默认Picker的原生控件:
public class CustomPickerHandler : PickerHandler { protected override View CreatePlatformView() { var numberPicker = new NumberPicker(Context); numberPicker.MinValue = 0; numberPicker.MaxValue = 60; numberPicker.ValueChanged += (s, e) => VirtualView.SelectedIndex = numberPicker.Value; return numberPicker; } }
在MauiProgram中替换默认Handler:
.ConfigureMauiHandlers(handlers => { #if ANDROID handlers.ReplaceHandler<Picker, CustomPickerHandler>(); #endif })
iOS端替换为WKPickerControl
类似地替换iOS端的PickerHandler:
public class CustomPickerHandler : PickerHandler { protected override UIView CreatePlatformView() { var picker = new WKPickerControl(); var items = VirtualView.Items.Select(i => new WKPickerItem { Title = i }).ToArray(); picker.SetItems(items, VirtualView.SelectedIndex); picker.ValueChanged += (s, e) => VirtualView.SelectedIndex = picker.SelectedItemIndex; return picker; } }
注册后即可让原有Picker在iOS手表上使用原生滚动选数UI。
另外,也可以用CollectionView实现跨平台统一的自定义滚动选择器:绑定0-60的数据源,通过控制滚动位置标记选中项,自己处理选中状态和滚动逻辑,适合需要完全定制UI的场景。
内容的提问来源于stack exchange,提问作者Lou
相关产品推荐
相关产品推荐

