You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET MAUI穿戴设备(Wear OS/iOS手表)中选择数字的合适控件咨询

适配Wear OS/iOS手表的数字选择方案

一、使用原生平台适配的控件

Wear OS(Android)

直接用Android原生的NumberPicker控件——就是你提到的闹钟场景里的滚动选数控件,天生适配小屏幕。在MAUI里可以通过自定义Handler绑定原生控件:

  1. 在Android项目中创建自定义视图,设置数字范围:
public class WatchNumberPicker : NumberPicker
{
    public WatchNumberPicker(Context context) : base(context)
    {
        MinValue = 0;
        MaxValue = 60;
        WrapSelectorWheel = false;
    }
}
  1. 在MAUI项目中定义对应的共享视图:
public class WatchNumberPickerView : View { }
  1. 在MauiProgram中注册Handler映射:
.ConfigureMauiHandlers(handlers =>
{
#if ANDROID
    handlers.AddHandler<WatchNumberPickerView, WatchNumberPickerHandler>();
#endif
})
  1. 实现Handler逻辑:
public class WatchNumberPickerHandler : ViewHandler<WatchNumberPickerView, WatchNumberPicker>
{
    protected override WatchNumberPicker CreatePlatformView()
    {
        return new WatchNumberPicker(Context);
    }
}

iOS Watch

iOS Watch原生的WKPickerControl是专为手表设计的滚动选数控件,同样通过MAUI Handler集成:

  1. 在iOS项目中创建自定义控件:
public class WatchNumberPicker : WKPickerControl
{
    public WatchNumberPicker()
    {
        var items = Enumerable.Range(0, 61).Select(i => new WKPickerItem { Title = i.ToString() }).ToArray();
        SetItems(items, 0);
    }
}
  1. 重复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:21:05