c# - 如何在 xamarin 表单中更改选择器底线颜色

标签 c# xaml xamarin

我需要更改选择器的底线颜色并更改选择器中显示的项目列表的背景颜色。我可以设置选择器的背景颜色。但是选择器中项目的背景颜色默认为白色。是有任何自定义渲染器或任何其他解决方案吗?我按以下方式在选择器中添加项目。

血型列表显示为白色。我需要更改该颜色。如何设置项目列表背景颜色?

public List<string> _bloodGroups = new List<string>() { "A+ve", "A-ve", "B+ve", "B-Ve", "O+ve", "O-ve", "AB+ve", "AB_ve" };

public void GetDistrictAsync()
{            
    foreach (string districts in _districts)
    {
        Picker_District.Items.Add(districts);
    }
}

在 XAML 页面中,代码如下

<StackLayout Orientation="Horizontal" 
    HorizontalOptions="FillAndExpand" 
    VerticalOptions="FillAndExpand" 
    HeightRequest="10"
    Margin="20,10,20,0"  
    BackgroundColor="#91BC47">
    <Picker 
        x:Name="Picker_BloodGroup" 
        HorizontalOptions="FillAndExpand"  
        TextColor="White" 
        BackgroundColor="#91BC47">
        <Picker.Items>
            <x:String>Select Blood Group</x:String>                           
        </Picker.Items>
    </Picker>
</StackLayout>

最佳答案

你好@jasminemathew 在 xamarin ios 部分添加这个自定义渲染器 记得在命名空间之前添加这一行 [程序集:ExportRenderer(typeof(Picker), typeof(CustomPickerRenderer))]

 public class CustomPickerRenderer : PickerRenderer
{
    private CALayer _borderLayer;
    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
    {
        base.OnElementChanged(e);

        if (Control == null)
            return;

        Control.BorderStyle = UITextBorderStyle.None;

        var element = Element as Picker;
        if (element == null)
            return;

        //DrawBorder(element.BorderColor.ToCGColor());
        DrawBorder(UIColor.FromRGB(156, 156, 156));

        e.NewElement.Unfocused += (sender, evt) =>
        {
            DrawBorder(UIColor.FromRGB(156, 156, 156)); // unfocused, set color

        };
        e.NewElement.Focused += (sender, evt) =>
        {
            DrawBorder(UIColor.FromRGB(245, 0, 47)); ; // focused, set color
        };
    }
    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);

        var element = Element as Picker;
        if (element == null)
            return;

        DrawBorder(UIColor.FromRGB(156, 156, 156));
    }
    public override CGRect Frame
    {
        get { return base.Frame; }
        set
        {
            base.Frame = value;

            var element = Element as Picker;
            if (element == null)
                return;

            // DrawBorder(element.BorderColor.ToCGColor());
            DrawBorder(UIColor.FromRGB(156, 156, 156));
        }
    }
    private void DrawBorder(UIColor borderColor)
    {
        if (Frame.Height <= 0 || Frame.Width <= 0)
            return;

        if (_borderLayer == null)
        {
            _borderLayer = new CALayer
            {
                MasksToBounds = true,
                Frame = new CGRect(0f, Frame.Height - 1, Frame.Width, 1f),
                BorderColor = borderColor.CGColor,
                BorderWidth = 1.0f
            };

            Control.Layer.AddSublayer(_borderLayer);
            Control.BorderStyle = UITextBorderStyle.None;
        }
        else
        {
            _borderLayer.BorderColor = borderColor.CGColor;
            _borderLayer.Frame = new CGRect(0f, Frame.Height - 1, Frame.Width, 1f);
        }
    }
}.   

关于c# - 如何在 xamarin 表单中更改选择器底线颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48921055/

相关文章:

c# - 是否可以将一个颜色资源指向 Xamarin.Forms 中的另一个颜色资源?

c# - 我可以将列表移到后面吗?

c# - 无法更新到 Web API 2.1

C# 整数验证

c# - Windows 8/XAML Double Tap 事件总是在 Tap 之前

c# - 将矩阵数组绑定(bind)到 WPF DataGrid

c# - 将 XAML 中的标签文本设置为字符串常量

ios - Xamarin - 绝对布局中带有文本和图像的按钮导致元素未对齐

c# - 在代码隐藏中创建 jqGrid 列模型

c# - 使用 C# 解析复杂的 JSON 结果