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示例效果参考:
内容的提问来源于stack exchange,提问作者Marvin
相关产品推荐
相关产品推荐

