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

Xamarin自定义Picker移除按钮及修改样式相关问题咨询

Xamarin自定义Picker问题解决方案

1. 移除Picker弹窗的Cancel/Ok按钮,点击选项直接触发选中

在你现有的BorderlessPickerRenderer类中新增代码,拦截默认的弹窗触发逻辑,自定义无按钮的列表弹窗:

using System.ComponentModel;
using Android.App;
using Android.Widget;

// 原有类代码不变,新增以下方法
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    base.OnElementPropertyChanged(sender, e);
    // 拦截Picker聚焦触发的默认弹窗
    if (e.PropertyName == nameof(Picker.IsFocused) && Element.IsFocused)
    {
        Control.ClearFocus();
        ShowNoButtonPicker();
    }
}

private void ShowNoButtonPicker()
{
    var optionList = Element.Items.ToList();
    if (!optionList.Any()) return;

    var dialogBuilder = new AlertDialog.Builder(Context);
    // 直接加载选项列表,不需要确定取消按钮
    dialogBuilder.SetAdapter(new ArrayAdapter<string>(Context, Android.Resource.Layout.SimpleListItem1, optionList), (dialog, args) =>
    {
        // 点击选项直接赋值,自动触发Picker的SelectedIndexChanged事件
        Element.SelectedIndex = args.Which;
    });
    dialogBuilder.Show();
}

如果你的项目已经迁移到AndroidX,需要将AlertDialog的引用替换为AndroidX.AppCompat.App.AlertDialog。

2. 修改Picker的边框颜色和背景色

替换你原有代码中Control.Background = Android.Graphics.Color.Rgb();这一行,通过GradientDrawable实现自定义背景和边框:

// 自定义背景和边框样式
var bgDrawable = new GradientDrawable();
// 设置Picker背景色,可自行修改RGB参数
bgDrawable.SetColor(Android.Graphics.Color.Rgb(255,255,255));
// 设置边框:第一个参数是边框宽度(单位px),第二个参数是边框颜色
bgDrawable.SetStroke(2, Android.Graphics.Color.Rgb(150,150,150));
// 可选:设置圆角,不需要圆角可设置为0
bgDrawable.SetCornerRadius(8);
// 赋值给原生控件
Control.Background = bgDrawable;

你提到的Picker示例效果参考:
Picker示例图

内容的提问来源于stack exchange,提问作者Marvin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:02