首页 > 解决方案 > Xamarin 自定义渲染器 System.ArgumentException 运行时

问题描述

我在控件中间创建了一个呈现的选择器以居中居中,但在进入页面的那一刻,它显示以下错误:System.ArgumentException。

我附上代码,看看你是否可以帮助我。

在项目新课...

using Xamarin.Forms;

namespace MaterialFUR
{
    public class PickerCentrat : Picker
    {
    }
}

在安卓...

using MaterialFUR;
using MaterialFUR.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(PickerCentrat), typeof(RendererPicker))]

namespace MaterialFUR.Droid
{
    public class RendererPicker : EntryRenderer
    {
        public RendererPicker(Context context) : base(context)
        {
        }

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

            if (Control != null)
            {
                Control.Gravity = GravityFlags.CenterHorizontal;
            }
        }
    }
}

在 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"
         x:Class="MaterialFUR.AgafarMaterialPage"
         xmlns:local="clr-namespace:MaterialFUR"
         Title="Agafar Material">
<ContentPage.Content>


    <StackLayout HorizontalOptions="Center" VerticalOptions="Center" Spacing="25">

        <Button x:Name="btnScan" Clicked="btnScan_Clicked" BackgroundColor="Gray" TextColor="White" Text="Llegir codi de barres"  FontSize="30" FontAttributes="Bold" BorderRadius="30"/>
        <Entry x:Name="entCodi" TextColor="Black" FontSize="30" FontAttributes="Bold" Keyboard="Default" Placeholder="Codi" HorizontalTextAlignment="Center"/>
        <Entry x:Name="entQtat" TextColor="Black" FontSize="30" FontAttributes="Bold" Keyboard="Numeric" Placeholder="Quantitat" HorizontalTextAlignment="Center"/>
        <local:PickerCentrat x:Name="pckUbicacio" Title="Ubicació" TextColor="Black" FontSize="30" FontAttributes="Bold">
            <Picker.Items>
                <x:String>SATMOBIL-1</x:String>
                <x:String>SATMOBIL-2</x:String>
                <x:String>SATMOBIL-3</x:String>
                <x:String>SATMOBIL-4</x:String>
                <x:String>SATMOBIL-5</x:String>
                <x:String>SATMOBIL-6</x:String>
                <x:String>SATMOBIL-7</x:String>
                <x:String>SATMOBIL-8</x:String>
                <x:String>SATMOBIL-9</x:String>
                <x:String>TALLER</x:String>
            </Picker.Items>
        </local:PickerCentrat>

        <StackLayout Orientation="Horizontal" Margin="0,100">
            <Button x:Name="btnConfirmar" Clicked="BtnConfirmar_Clicked" BackgroundColor="SteelBlue" TextColor="White" Text="Confirmar" FontSize="30" FontAttributes="Bold" BorderRadius="30"/>
            <Button x:Name="btnCancelar" Clicked="BtnCancelar_Clicked" BackgroundColor="Gray" TextColor="White" Text="Cancelar" FontSize="30" FontAttributes="Bold" BorderRadius="30"/>
        </StackLayout>

    </StackLayout>


</ContentPage.Content>

显示错误。 在此处输入图像描述

感谢您的帮助,谢谢!

标签: androidxamlxamarinrenderercustom-renderer

解决方案


您的班级需要继承自PickerRenderer

using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(PickerCentrat), typeof(RendererPicker))]

namespace MaterialFUR.Droid
{
    public class RendererPicker : PickerRenderer
    {
        public RendererPicker(Context context) : base(context)
        {
        }

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

            if (Control != null)
            {
                Control.Gravity = GravityFlags.CenterHorizontal;
            }
        }
    }
}

如果您不确定需要从哪个类继承您的 CustomRenderer,您可以随时在此处查看Xamarin.Forms源代码(适用于 Android)。

希望这可以帮助。


推荐阅读