在 Xamarin.Forms 中,Picker 控件的下划线颜色(即 Entry 控件的下划线颜色)通常是由平台特定的渲染器控制的。要更改 Picker 下划线的颜色,你需要创建一个自定义渲染器。
以下是如何在 Android 和 iOS 平台上实现这一点的示例。
首先,在你的 Xamarin.Forms 项目中创建一个自定义 Picker 控件。
CustomPicker.cs
using Xamarin.Forms;
namespace YourNamespace
{
public class CustomPicker : Picker
{
}
}
在你的 Android 项目中,创建一个自定义渲染器来更改 Picker 下划线的颜色。
CustomPickerRenderer.cs
using Android.Content;
using Android.Graphics.Drawables;
using YourNamespace;
using YourNamespace.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(CustomPicker), typeof(CustomPickerRenderer))]
namespace YourNamespace.Droid
{
public class CustomPickerRenderer : PickerRenderer
{
public CustomPickerRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if (Control != null)
{
// 更改下划线颜色
var gd = new GradientDrawable();
gd.SetColor(global::Android.Graphics.Color.Transparent);
this.Control.SetBackground(gd);
// 设置下划线颜色
Control.BackgroundTintList = Android.Content.Res.ColorStateList.ValueOf(global::Android.Graphics.Color.Red);
}
}
}
}
在你的 iOS 项目中,创建一个自定义渲染器来更改 Picker 下划线的颜色。
CustomPickerRenderer.cs
using UIKit;
using YourNamespace;
using YourNamespace.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(CustomPicker), typeof(CustomPickerRenderer))]
namespace YourNamespace.iOS
{
public class CustomPickerRenderer : PickerRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
if (Control != null)
{
// 更改下划线颜色
Control.BorderStyle = UITextBorderStyle.None;
var bottomBorder = new UIView();
bottomBorder.BackgroundColor = UIColor.Red;
bottomBorder.TranslatesAutoresizingMaskIntoConstraints = false;
Control.AddSubview(bottomBorder);
bottomBorder.LeadingAnchor.ConstraintEqualTo(Control.LeadingAnchor).Active = true;
bottomBorder.TrailingAnchor.ConstraintEqualTo(Control.TrailingAnchor).Active = true;
bottomBorder.BottomAnchor.ConstraintEqualTo(Control.BottomAnchor).Active = true;
bottomBorder.HeightAnchor.ConstraintEqualTo(1.0f).Active = true;
}
}
}
}
现在,你可以在 XAML 或 C# 代码中使用自定义的 CustomPicker
控件。
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:YourNamespace"
x:Class="YourNamespace.MainPage">
<StackLayout>
<local:CustomPicker Title="Select an item">
<Picker.Items>
<x:String>Item 1</x:String>
<x:String>Item 2</x:String>
<x:String>Item 3</x:String>
</Picker.Items>
</local:CustomPicker>
</StackLayout>
</ContentPage>
领取专属 10元无门槛券
手把手带您无忧上云