Система.ArgumentNullException: ‘Значение не может быть нулевым. Имя параметра: элемент’ возникает проблема при реализации xamarin.средство выбора форм

#c# #xamarin.forms #xamarin.android

#c# #xamarin.forms #xamarin.android

Вопрос:

Я реализую средство выбора в проекте xamarin.forms, поэтому при реализации этого я получаю вышеупомянутую проблему

XamarinPicker.xaml

 <pages:CustomPage.Content>
    <Grid>
        <Grid.Padding>
            <OnPlatform x:TypeArguments="Thickness">
                <On Platform="iOS" Value="10,20,10,10" />
                <On Platform="Android" Value="10" />
            </OnPlatform>
        </Grid.Padding>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Frame Grid.Row="0" Padding="10,1,0,1" Margin="10,0,10,10" HeightRequest="50" HasShadow="False" BorderColor="#24527A" CornerRadius="5" VerticalOptions="Start">
            <Grid ColumnSpacing="0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="1"/>
                    <ColumnDefinition Width="50"/>
                </Grid.ColumnDefinitions>
                <controls:CustomEntry Placeholder="{local:Translate NoteSearchHint}" Text="{Binding SearchText}">
                    <controls:CustomEntry.Behaviors>
                        <behaviors:EventToCommandBehavior EventName="TextChanged" Command="{Binding TextChangeCommand}" />
                    </controls:CustomEntry.Behaviors>
                </controls:CustomEntry>
                <BoxView Grid.Column="1" BackgroundColor="#24527A"/>

                <Image Grid.Column="2" Source="search_black" IsEnabled="{Binding IsSearchEnable}" IsVisible="{Binding SearchButtonVisibility}" HeightRequest="20" WidthRequest="20" VerticalOptions="Center" HorizontalOptions="Center" >
                    <Image.GestureRecognizers>
                        <TapGestureRecognizer Command="{Binding SearchCommand}"/>
                    </Image.GestureRecognizers>
                </Image>
                <Image Grid.Column="2" IsEnabled="{Binding IsCloseEnable}" IsVisible="{Binding CloseButtonVisibility}" Source="close_gray" HeightRequest="{OnIdiom Phone='20',Tablet='30'}" WidthRequest="{OnIdiom Phone='20',Tablet='30'}" Aspect="AspectFit" VerticalOptions="Center">
                    <Image.GestureRecognizers>
                        <TapGestureRecognizer Command="{Binding CloseCommand}"/>
                    </Image.GestureRecognizers>
                </Image>
            </Grid>

        </Frame>
        <StackLayout Grid.Row="1">
            <Grid Padding="{OnIdiom Phone='20,10,20,0',Tablet='30,15,30,0'}" RowSpacing="0" ColumnSpacing="{OnIdiom Phone='20',Tablet='30'}" VerticalOptions="Start">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="{OnIdiom Phone='44',Tablet='58'}" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <StackLayout Grid.Row="0" Grid.Column="0">
                    <Label Text="My Notes" TextColor="{Binding Tab1TextColor}" Style="{DynamicResource LibraryPurpleSemiBoldLabel}" />
                    <StackLayout.GestureRecognizers>
                        <TapGestureRecognizer Command="{Binding ChangeTabCommand}" CommandParameter="1" />
                    </StackLayout.GestureRecognizers>
                </StackLayout>
                <BoxView Grid.Row="1" Grid.Column="0" IsVisible="{Binding IsVisibleTab1Box}" HeightRequest="{OnIdiom Phone='4',Tablet='7'}" HorizontalOptions="FillAndExpand" VerticalOptions="End" BackgroundColor="{DynamicResource Yellow}" CornerRadius="{OnIdiom Phone='4,4,0,0',Tablet='7,7,0,0'}" />
                <StackLayout Grid.Row="0" Grid.Column="1">
                    <Label Text="Other Notes" TextColor="{Binding Tab2TextColor}" Style="{DynamicResource LibraryGraySemiBoldLabel}" />
                    <StackLayout.GestureRecognizers>
                        <TapGestureRecognizer Command="{Binding ChangeTabCommand}" CommandParameter="2" />
                    </StackLayout.GestureRecognizers>
                </StackLayout>
                <BoxView Grid.Row="1" Grid.Column="1" IsVisible="{Binding IsVisibleTab2Box}" HeightRequest="{OnIdiom Phone='4',Tablet='7'}" HorizontalOptions="FillAndExpand" VerticalOptions="End" BackgroundColor="{DynamicResource Yellow}" CornerRadius="{OnIdiom Phone='4,4,0,0',Tablet='7,7,0,0'}" />
            </Grid>
        </StackLayout>
        <StackLayout Grid.Row="2" Padding="0" HorizontalOptions="EndAndExpand" IsVisible="{Binding FilterVisibility}" VerticalOptions="StartAndExpand" Orientation="Horizontal">
            <Label Text="Filter by:"/>
            <Frame HeightRequest="{OnIdiom Phone='30',Tablet='50'}" Padding="0" HasShadow="false" CornerRadius="{OnIdiom Phone='4',Tablet='6'}" VerticalOptions="StartAndExpand" HorizontalOptions="FillAndExpand">
                <Picker x:Name="FilterPicker"
                                            ios:Picker.UpdateMode="WhenFinished"
                                            Title="All"
                                            TitleColor="{DynamicResource LightGray}"
                                            BackgroundColor="{DynamicResource TransparentLightGray}"
                                            FontSize="{DynamicResource FontSize14}"    
                                    SelectedItem="{Binding SelectedFilter,Mode=TwoWay}">
                    <Picker.ItemsSource>
                        <x:Array Type="{x:Type x:String}">
                            <x:String>All</x:String>
                            <x:String>Public</x:String>
                            <x:String>Private</x:String>
                        </x:Array>
                    </Picker.ItemsSource>
                </Picker>
                <!--<Image IsVisible="{Binding EndDropDownVisible}" AbsoluteLayout.LayoutBounds="0.95,0.5,20,20" AbsoluteLayout.LayoutFlags="PositionProportional" Source="chevrondropdown" HeightRequest="{OnIdiom Phone='20',Tablet='30'}" WidthRequest="{OnIdiom Phone='20',Tablet='30'}" VerticalOptions="Center">
                                            <Image.GestureRecognizers>
                                                <TapGestureRecognizer
                                                    Tapped="EndDateImage_Tapped"
                                                    NumberOfTapsRequired="1" />
                                            </Image.GestureRecognizers>
                                        </Image>-->
            </Frame>
        </StackLayout>
        <ListView x:Name="NoteList" Grid.Row="3" ItemsSource="{Binding Notes}" HasUnevenRows="True" IsVisible="{Binding IsViewVisible}" CachingStrategy="RetainElement" SeparatorVisibility="None">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <!--<StackLayout Orientation="Vertical" HeightRequest="90" Margin="5,15,5,5" Padding="10,5,10,5">
                        <StackLayout Orientation="Horizontal">
                            <BoxView Color="Black" WidthRequest="5" HeightRequest="80" VerticalOptions="Center" />
                            <Label Text="Note text" FontSize="14" HeightRequest="80" TextColor="#585858" Margin="3,0,0,0"></Label>
                        </StackLayout>
                        <Label Text="Sample note text added by user" FontSize="10" VerticalOptions="StartAndExpand" FontAttributes="Bold" HorizontalOptions="StartAndExpand" TextColor="#000000" Margin="5,0,0,0"></Label>
                    </StackLayout>-->
                    <ViewCell>
                        <Frame Grid.Row="0" HasShadow="False" Padding="0" Margin="10,5" BorderColor="#e0e4e2" IsClippedToBounds="True" CornerRadius="10">
                            <Grid RowSpacing="0">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="Auto"/>
                                </Grid.RowDefinitions>

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

                                <BoxView BackgroundColor="{Binding NoteData.NoteColor, Converter={converters:HighlightColorConverter}}" Grid.Column="0" Grid.Row="0" Grid.RowSpan="5" WidthRequest="10"/>

                                <Label Text="{Binding NoteData.NoteText}" Grid.Column="1" Grid.Row="0" FontSize="Small" LineBreakMode="TailTruncation"  FontAttributes="Italic" Margin="5,10,0,0" TextColor="Gray" MaxLines="2" VerticalTextAlignment="Center"/>
                                <Label Text="{local:Translate NoteLabel}" Grid.Column="1" Grid.Row="1" FontSize="Large" FontAttributes="Bold" Margin="5,5,0,5" VerticalTextAlignment="Center" TextColor="#3c5d80"/>
                                <Label Text="{Binding NoteData.NoteContent}" VerticalTextAlignment="Center" VerticalOptions="Center" Grid.Column="1" Grid.Row="2" FontSize="15" Margin="5,3,0,5" FontAttributes="Bold"/>

                                <Label Grid.Column="1" Grid.Row="3" TextColor="Gray" FontSize="10" Margin="5,0,0,10">
                                    <Label.FormattedText>
                                        <FormattedString>
                                            <Span Text="{Binding PageNumber,Converter={converters:EpubPageIndexConverter}, StringFormat='Page Number : {0}'}" />
                                            <Span Text="{Binding DisplayCreatedDate, StringFormat=' Added on {0: dd-MM-yyyy}'}" />
                                        </FormattedString>
                                    </Label.FormattedText>
                                </Label>
                                <StackLayout Grid.Column="1" Grid.Row="4" HorizontalOptions="StartAndExpand" VerticalOptions="StartAndExpand">
                                    <Grid>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto"/>
                                        </Grid.RowDefinitions>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="Auto"/>
                                            <ColumnDefinition Width="Auto"/>
                                        </Grid.ColumnDefinitions>
                                        <Label Grid.Row="1" Grid.Column="1" Text="Make it:"/>
                                        <Frame Grid.Row="1" Grid.Column="2" HeightRequest="{OnIdiom Phone='30',Tablet='50'}" Padding="0" HasShadow="false" CornerRadius="{OnIdiom Phone='4',Tablet='6'}" VerticalOptions="StartAndExpand" HorizontalOptions="FillAndExpand">
                                            <Picker
                                            ios:Picker.UpdateMode="WhenFinished"
                                            Title="Select One"
                                            TitleColor="{DynamicResource LightGray}"
                                            BackgroundColor="{DynamicResource TransparentLightGray}"
                                            FontSize="{DynamicResource FontSize14}"
                                                SelectedItem="{Binding PublicPrivate}">
                                                <Picker.ItemsSource>
                                                    <x:Array Type="{x:Type x:String}">
                                                        <x:String>Public</x:String>
                                                        <x:String>Private</x:String>
                                                    </x:Array>
                                                </Picker.ItemsSource>
                                            </Picker>
                                        </Frame>
                                    </Grid>
                                </StackLayout>
                                <ImageButton Source="more" HeightRequest="15" WidthRequest="15" Grid.Row="0" Grid.Column="2" Grid.RowSpan="4" VerticalOptions="Start" Margin="0,10,15,0" Command="{Binding Source={x:Reference NoteList}, Path=BindingContext.OpenActionPopupCommand}" CommandParameter="{Binding .}"/>
                            </Grid>
                            <Frame.GestureRecognizers>
                                <TapGestureRecognizer Command="{Binding Source={x:Reference NoteList}, Path=BindingContext.SelectNoteCommand}" CommandParameter="{Binding .}"/>
                            </Frame.GestureRecognizers>
                        </Frame>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <StackLayout Grid.Row="3"  IsVisible="{Binding IsViewVisible, Converter={converters:InverseBooleanConverter}}" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
            <Label Text="{local:Translate NoNoteText}" FontSize="Default" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" />
        </StackLayout>
    </Grid>
</pages:CustomPage.Content>
 

Если я удалю SelectedItem="{Binding PublicPrivate}" эту строку кода, это не вызовет никаких проблем, но если я добавлю приведенную выше строку, я получу вышеупомянутую проблему.

XamarinPickerViewModel.cs

 string _publicPrivate;
        public string PublicPrivate
        {
            get { return _publicPrivate; }
            set { _publicPrivate = value;OnPropertyChanged(); }
        }
public override void OnAppearing()
        {
            base.OnAppearing();
            BindPickerData();
        }
public void BindPickerData()
        {
            PublicPrivate = "public";
        }
 

Когда я нажимаю на кнопку, она выдает System.ArgumentNullException: 'Value cannot be null. Parameter name: element' эту проблему и перенаправляет меня на

Пользовательская вкладка pagerendere.cs

 protected override void OnLayout(bool changed, int l, int t, int r, int b)
        {
            base.OnLayout(changed, l, t, r, b);
        }
 

к этому

пожалуйста, помогите мне, заранее спасибо!!!

Комментарии:

1. Привет, Пиюш Дживане. Я протестировал код в базовой демо-версии, и он работает нормально. Исключение ArgumentNullException не возникло. Перенаправило ли исключение вас в класс ‘CustomTabbedPageRenderer’? И используете ли вы пользовательский TabbedPage интерфейс в качестве шаблона? Попробуйте протестировать код средства выбора в одном ContentPage , чтобы проверить проблему.

2. привет @JarvanZhang-MSFT Я обновлю свой код фактическим кодом

3. @JarvanZhang-MSFT да, я использую пользовательские вкладки, и эта ошибка приводит меня к этому классу

4. Привет, я видел, что вы вчера опубликовали решение этой проблемы. Вы удалили это? Теперь проблема решена?

5. привет @JarvanZhang-MSFT, да, я удалил это сообщение, поскольку моя проблема частично решена с помощью этого кода