如何在xamarin crossplatform中更改编辑器底部边框线颜色

时间:2018-02-01 09:01:05

标签: c# xamarin.forms xamarin.android

这是我的渲染器代码

public  class CustomEditorControlRenderer: EditorRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
        {
            var _element = e.NewElement as EditorControl;

            this.Control.Hint = _element.Placeholder;

            Control.SetHintTextColor(_element.PlaceholderColor.ToAndroid());
            this.Control.SetBackgroundColor(Android.Graphics.Color.Transparent);
            this.Control.SetCursorVisible(true);              

            Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcAtop);

        }

      }       

    }

Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcAtop);无效

2 个答案:

答案 0 :(得分:0)

我认为你不需要渲染器,那么用Stacking将你的编辑器包装在StackLayout中呢? 这应该做的工作:

<StackLayout BackgroundColor="White">
      <StackLayout BackgroundColor="Black" Padding="1">
          <Editor BackgroundColor="White" />
      </StackLayout>
</StackLayout>

答案 1 :(得分:0)

您可以使用selector来实现它:

C#代码

protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
    base.OnElementChanged(e);
    if (Control!= null)
    {
        //Control.SetBackground(null);
        Control.SetBackgroundResource(Resource.Drawable.et_underline_selector);
    }

}

.xml文件

将这些文件放入drawable文件夹:

et_underline_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="false" android:drawable="@drawable/et_underline_unselected"/>
  <item android:state_focused="true" android:drawable="@drawable/et_underline_selected"/>
</selector>

et_underline_unselected.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item
      android:bottom="0dp"
      android:left="-2dp"
      android:right="-2dp"
      android:top="-2dp">
    <shape>
      <solid android:color="@android:color/transparent" />
      <stroke
          android:width="1dp"
          android:color="@android:color/darker_gray" />
      <padding android:bottom="4dp" />
    </shape>
  </item>

</layer-list>

et_underline_selected.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  <item
      android:bottom="0dp"
      android:left="-2dp"
      android:right="-2dp"
      android:top="-2dp">
    <shape>
      <solid android:color="@android:color/transparent" />
      <stroke
          android:color="@android:color/holo_green_light"
          android:width="2dp" />
      <padding android:bottom="4dp" />

    </shape>
  </item>

</layer-list>