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