有什么方法可以使用视觉效果在iOS中自定义控件样式?

时间:2019-08-28 08:10:54

标签: c# xamarin.forms xamarin.forms.entry

我正在尝试为启用了Entry的iOS平台自定义Visual=Material字段。

我尝试通过CustomRenderer进行操作,但是由于是iOS平台,因此我不知道如何达到此目的,例如,修改材料底部边框颜色而不修改控件的整个文本颜色。

[assembly: ExportRenderer(typeof(Entry), typeof(CustomMaterialEntryRenderer), new[] { typeof(VisualMarker.MaterialVisual) })]

    public class CustomMaterialEntryRenderer : MaterialEntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control == null || e.NewElement == null) return;

            Layer.BorderColor = Color.FromHex("#cedee7").ToCGColor();
        }
    }

为了清楚起见,以防万一,我想要底线例如为红色,文本为黑色。

Entry Example

谢谢!

1 个答案:

答案 0 :(得分:1)

看来CustomRenderer永远不会被称为一个现存的问题。我们将专注于这个问题。

解决方法1:

如果只想设置Entry的下划线颜色。无需设置Visual=Material。您只需创建默认的自定义渲染器 Entry

if (Control != null)
{

  Control.BorderStyle = UITextBorderStyle.None;

  UIView lineView = new UIView()
  {

     Frame = new CGRect(0, Element.HeightRequest - 1, Element.WidthRequest, 1),
     BackgroundColor = UIColor.Red,

  };

  Control.AddSubview(lineView);

}

不要忘记在xaml中设置WidthRequestHeightRequest

解决方法2

幸运的是,有很多来自nuget的Material Control插件。您可以直接下载和使用它。例如MaterialFormControls

从Nuget Manager下载软件包(确保检查包含的预发行版) enter image description here

并设置属性AccentColor更改下划线颜色

<local:MaterialEntry IsPassword="True" Placeholder="email" AccentColor="Red"/>