【问题标题】:Xamarin custom renderer System.ArgumentException when runsXamarin 自定义渲染器 System.ArgumentException 运行时
【发布时间】:2019-01-08 06:06:37
【问题描述】:

我在控件中间创建了一个渲染选择器,但在进入页面的那一刻,它显示以下错误: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>

显示错误。

感谢您的帮助,谢谢!

【问题讨论】:

    标签: android xaml xamarin renderer custom-renderer


    【解决方案1】:

    你的类需要继承自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 源代码 here(适用于 Android)。

    希望这会有所帮助。

    【讨论】:

    • 我还必须更改 OneElementChanged 方法中的控件。在我的情况下为 Picker 输入。谢谢 apineda。
    • 太棒了!是的,这也需要更新。很好,你找到了。
    • 文档还提供了一个很好的图表,说明哪些渲染器用作基本渲染器以及它们映射到哪些控件:docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2021-04-04
    • 2018-07-29
    • 1970-01-01
    • 2016-09-03
    • 2019-01-14
    相关资源
    最近更新 更多