Xamarin 条目底线颜色不会改变

D.W*_*ski 3 c# android visual-studio xamarin xamarin.forms

所以我正在开发 Android 应用程序。现在,我正在创建 MainPage,我在Entry其中插入了与往常一样具有底线的内容。我的预览器的底线是White在我的手机上它似乎是Black.

所以为了解决这个问题,我决定使用渲染器,看看我是否可以解决它。我在 App 中创建了类,CustomEntryRenderer它是从 Entry 继承的。然后我在 App.Android 中创建了 Class 调用CustomEntryRednererAndroid它应该改变底部输入行的颜色。但它不影响它。我尝试使用我在互联网上找到的一些自定义渲染器来做同样的事情。

例如删除底线也不会影响程序: 删除线

MainPage.xaml 中的条目:

<Entry 

        Grid.Row="4"
        Grid.ColumnSpan="2"
        TextColor="Silver"         
        Placeholder="Write Your nickname"
        PlaceholderColor="Silver"

        />
Run Code Online (Sandbox Code Playgroud)

自定义入口渲染器:

 public class CustomEntryRenderer : Entry
{
}
Run Code Online (Sandbox Code Playgroud)

CustomEntryRendererAndroid:

[assembly: ExportRenderer(typeof(CustomEntryRenderer), typeof(MyEntryRenderer))]
namespace App3.Droid
{
public class MyEntryRenderer : EntryRenderer
{

    public MyEntryRenderer(Context context) : base(context) { }
    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);

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

        if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
            Control.BackgroundTintList = ColorStateList.ValueOf(Android.Graphics.Color.White);
        else
            Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcAtop);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

Android的最佳解答 ,由于某种原因还在CustomEntryRendererAndroid.cs我不得不使用Android.Graphic代替Xamarin.Forms.Color。但我不认为这是问题。

我已经尝试了几个小时,但找不到摆脱这种情况的方法。将不胜感激任何想法。

Nic*_*ers 6

在 xaml 中,您使用的是默认Entry控件,而不是CustomEntryRenderer渲染器正在影响的控件。此外,您可能想要重命名它,因为它实际上不是您的渲染器,而是您的自定义控件。

要解决您的问题,你可以改变你的渲染器typeof(CustomEntryRenderer),以typeof(Entry)默认情况下影响您的应用程序所有的Android项目。例如,这适用于我的所有条目的测试应用程序:

[assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRenderer))]
namespace YourNameSpace
{
    public class MyEntryRenderer : EntryRenderer
    {
        public MyEntryRenderer(Context context) : base(context) { }

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

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

            if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                Control.BackgroundTintList = ColorStateList.ValueOf(Android.Graphics.Color.White);
            else
                Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcAtop);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是切换您的 xaml 代码MainPage以实际使用您的自定义控件。例如,<local:CustomEntryRenderer/>