Xamarin.forms &引用;系统.反射.目标职业例外“;在Xamarin Android中

Xamarin.forms &引用;系统.反射.目标职业例外“;在Xamarin Android中,xamarin.forms,xamarin.android,custom-renderer,Xamarin.forms,Xamarin.android,Custom Renderer,您好,我正在尝试使用Xamarin表单构建一个应用程序,该表单包含一个带有图像和条目的框架 下面是我的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="

您好,我正在尝试使用Xamarin表单构建一个应用程序,该表单包含一个带有图像和条目的框架

下面是我的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:SampleLoginRenderer" 
    x:Class="SampleLoginRenderer.SampleLoginRendererPage"
    BackgroundColor="Blue">

    <ContentPage.Content>
    <Grid Grid.Row="3" Padding="0,10,0,0">
        <local:MyFrame BackgroundColor="Red" OutlineColor="White" HasShadow="false" Padding="20,5,5,5" VerticalOptions="Center">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>

                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>

                <Image Source="nav_user.png" HeightRequest="20" WidthRequest="20" HorizontalOptions="Start" />

                <local:MyEntry Placeholder="UserName / PhoneNo" 
                       x:Name="EntryUserName" 
                       BackgroundColor="White" 
                       PlaceholderColor="White" 
                       Grid.Column="1" 
                       HorizontalOptions="FillAndExpand" 
                       TextColor="White"  
                       FontSize="15"    
                       HeightRequest="40" />
          </Grid>
    </local:MyFrame>
  </Grid>
        </ContentPage.Content>
</ContentPage>
并创建了一个XML文件,(见下文)

Xamarin Android条目渲染器:

using Xamarin.Forms;
using System;
using Xamarin.Forms.Platform.Android;
using SampleLoginRenderer;
using SampleLoginRenderer.Android;
using Android.Content;
using Android.Graphics.Drawables;
using Android.Text;
using Android.Content.Res;

[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace SampleLoginRenderer.Android
{
    public class MyEntryRenderer : EntryRenderer
    {
        public MyEntryRenderer(Context context) : base(context)
        {
        }

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

            if (Control != null)
            {
                GradientDrawable gd = new GradientDrawable();
                gd.SetColor(global::Android.Graphics.Color.Transparent);
                #pragma warning disable CS0618 // Type or member is obsolete
                this.Control.SetBackgroundDrawable(gd);
                #pragma warning restore CS0618 // Type or member is obsolete
                this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
                Control.SetHintTextColor(ColorStateList.ValueOf(global::Android.Graphics.Color.White));
            }
        }
    }
}
using SampleLoginRenderer;
using SampleLoginRenderer.iOS;
using Xamarin.Forms;
using System;
using Xamarin.Forms.Platform.iOS;
using UIKit;

[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace SampleLoginRenderer.iOS
{
    public class MyEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {

                Control.BorderStyle = UITextBorderStyle.None;
                Control.Layer.CornerRadius = 10;
                Control.TextColor = UIColor.White;

            }
        }
    }
}
使用Xamarin.Forms;
使用制度;
使用Xamarin.Forms.Platform.Android;
使用SampleLoginRenderer;
使用SampleLoginRenderer.Android;
使用Android.Content;
使用Android.Graphics.Drawables;
使用Android.Text;
使用Android.Content.Res;
[assembly:ExportRenderer(typeof(MyEntry)、typeof(MyEntryRenderer))]
名称空间SampleLoginRenderer.Android
{
公共类MyEntryRenderer:EntryRenderer
{
公共MyEntryRenderer(上下文):基础(上下文)
{
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
GradientDrawable gd=新的GradientDrawable();
SetColor(全局::Android.Graphics.Color.Transparent);
#pragma warning disable CS0618//类型或成员已过时
本品为对照品,可退根(gd);
#pragma warning restore CS0618//类型或成员已过时
this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
Control.SetHintTextColor(ColorStateList.ValueOf(global::Android.Graphics.Color.White));
}
}
}
}
Xamarin iOS条目渲染器:

using Xamarin.Forms;
using System;
using Xamarin.Forms.Platform.Android;
using SampleLoginRenderer;
using SampleLoginRenderer.Android;
using Android.Content;
using Android.Graphics.Drawables;
using Android.Text;
using Android.Content.Res;

[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace SampleLoginRenderer.Android
{
    public class MyEntryRenderer : EntryRenderer
    {
        public MyEntryRenderer(Context context) : base(context)
        {
        }

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

            if (Control != null)
            {
                GradientDrawable gd = new GradientDrawable();
                gd.SetColor(global::Android.Graphics.Color.Transparent);
                #pragma warning disable CS0618 // Type or member is obsolete
                this.Control.SetBackgroundDrawable(gd);
                #pragma warning restore CS0618 // Type or member is obsolete
                this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
                Control.SetHintTextColor(ColorStateList.ValueOf(global::Android.Graphics.Color.White));
            }
        }
    }
}
using SampleLoginRenderer;
using SampleLoginRenderer.iOS;
using Xamarin.Forms;
using System;
using Xamarin.Forms.Platform.iOS;
using UIKit;

[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace SampleLoginRenderer.iOS
{
    public class MyEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {

                Control.BorderStyle = UITextBorderStyle.None;
                Control.Layer.CornerRadius = 10;
                Control.TextColor = UIColor.White;

            }
        }
    }
}
使用SampleLoginRenderer;
使用SampleLoginRenderer.iOS;
使用Xamarin.Forms;
使用制度;
使用Xamarin.Forms.Platform.iOS;
使用UIKit;
[assembly:ExportRenderer(typeof(MyEntry)、typeof(MyEntryRenderer))]
命名空间SampleLoginRenderer.iOS
{
公共类MyEntryRenderer:EntryRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
Control.BorderStyle=UITextBorderStyle.None;
Control.Layer.CornerRadius=10;
Control.TextColor=UIColor.White;
}
}
}
}
我在iOS上运行该应用程序,它会给出我想要的结果(见下文)

但是,当我在Android上运行同一个应用程序时,我遇到了以下异常,应用程序崩溃

我不明白为什么Android上会出现这种情况,而iOS上却运行良好

如有任何解决办法或建议,将不胜感激


提前感谢

尝试调试render类以找出导致问题的行尝试清理并重建项目。
using System;
using Xamarin.Forms;

namespace SampleLoginRenderer
{
    public class MyEntry : Entry
    {

    }
}
using Xamarin.Forms;
using System;
using Xamarin.Forms.Platform.Android;
using SampleLoginRenderer;
using SampleLoginRenderer.Android;
using Android.Content;
using Android.Graphics.Drawables;
using Android.Text;
using Android.Content.Res;

[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace SampleLoginRenderer.Android
{
    public class MyEntryRenderer : EntryRenderer
    {
        public MyEntryRenderer(Context context) : base(context)
        {
        }

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

            if (Control != null)
            {
                GradientDrawable gd = new GradientDrawable();
                gd.SetColor(global::Android.Graphics.Color.Transparent);
                #pragma warning disable CS0618 // Type or member is obsolete
                this.Control.SetBackgroundDrawable(gd);
                #pragma warning restore CS0618 // Type or member is obsolete
                this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
                Control.SetHintTextColor(ColorStateList.ValueOf(global::Android.Graphics.Color.White));
            }
        }
    }
}
using SampleLoginRenderer;
using SampleLoginRenderer.iOS;
using Xamarin.Forms;
using System;
using Xamarin.Forms.Platform.iOS;
using UIKit;

[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace SampleLoginRenderer.iOS
{
    public class MyEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {

                Control.BorderStyle = UITextBorderStyle.None;
                Control.Layer.CornerRadius = 10;
                Control.TextColor = UIColor.White;

            }
        }
    }
}