ListView中的Xamarin条目

guicsvcw  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(164)

ListView中的Entry出现问题。返回的错误是Entry未分配Focus。在ListView中,单击时触发Tap事件时出现Labels,在此事件中,将触发弹出窗口以供用户对数据进行排序,并且我希望添加条目以供用户更改数量。
代码如下所示:

<ListView CachingStrategy="RecycleElement" SeparatorVisibility="Default" ItemsSource="{Binding PartsData}" RowHeight="35" SeparatorColor="#DFDFDF" HasUnevenRows="true" ItemTapped="PartsTapped">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <templates:PartsTemplate/>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

PartsTemplate.xaml

<Grid ColumnSpacing="10" Margin="0,10">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <artina:CircleImage Margin="0" Grid.Row="0" Grid.Column="0" Source="{Binding StatusPendent}" BorderColor="White" BackgroundColor="Transparent" Style="{ StaticResource Avatar }" Aspect="AspectFill" HeightRequest="24" WidthRequest="24" HorizontalOptions="Start" VerticalOptions="Start"/>
    <StackLayout Grid.Row="0" Grid.Column="1" Spacing="0">
        <Label Text="{Binding PartFormat}" />
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>

                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <Frame CornerRadius="5" HeightRequest="16" HasShadow="False" Margin="0" Padding="8,6" BackgroundColor="#F1F5F7" BorderColor="#F1F5F7">
                <Label HorizontalOptions="CenterAndExpand" Margin="0" Padding="0" HorizontalTextAlignment="Center" 
                       FontSize="11" TextColor="#202020" Text="{Binding CategoryName}" />
            </Frame>
        </Grid>
    </StackLayout>
    <Grid Grid.Row="0" Grid.Column="2" HorizontalOptions="EndAndExpand">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <artina:Button Grid.Column="0" Style="{StaticResource ActionButton}" Text="-" />
        <Entry Grid.Row="0" x:Name="EntryQtd" Grid.Column="1" Style="{StaticResource EntryCenter}" Text="{Binding Quantity}" Keyboard="Telephone" AutomationId="{Binding Id}" />
        <artina:Button Grid.Column="2" Grid.Row="0" Style="{StaticResource ActionButton}" Text="+"/>
    </Grid>

    <Ellipse Grid.Row="1" Grid.Column="0" Fill="#2BAC76" IsVisible="{Binding ClassificationIsOk}" HeightRequest="10" WidthRequest="10" HorizontalOptions="Center" VerticalOptions="Center" />
    <Label Grid.Row="1" Grid.Column="1" Style="{StaticResource LabelBasic}" Text="{Binding ClassificationInformation}" />
</Grid>

MainView.xaml.cs

private void PartsTapped(Object sender, ItemTappedEventArgs e)
{
    var selectedItem = ((ListView)sender).SelectedItem;
    var tappedItem = (MyViewModel)selectedItem;

    NavigationHelper.PushPopupAsync(new PoupClassification(tappedItem.Id));
}

弹出窗口显示正确。但当我点击条目时,应用程序崩溃,报告焦点错误。我如何在不影响弹出窗口打开的情况下分配焦点

0x77 in Xamarin.Forms.Platform.Android.ViewRenderer<Xamarin.Forms.Entry,Xamarin.Forms.Platform.Android.FormsEditText>.Android.Views.View.IOnFocusChangeListener.OnFocusChange at D:\a\1\s\Xamarin.Forms.Platform.Android\ViewRenderer.cs:114,6  C#
0x12 in Android.Views.View.IOnFocusChangeListenerInvoker.n_OnFocusChange_Landroid_view_View_Z at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-31/mcw/Android.Views.View.cs:2844,5  C#
0xB in Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLZ_V at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:176,5   C#
vawmfj5a

vawmfj5a1#

尝试将Tapped事件移至Entry同层级之Layout上的TapGestureRecognizer,并使用CollectionView
下面以GridCollectionView为例。
尝试使用注解来注解掉其他可以逐个注解的元素,以便检测可能导致错误的元素:

<DataTemplate x:Key="dataTemplate">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition />
      <ColumnDefinition Width="100"/>
    </Grid.ColumnDefinitions>
    <Grid>
      <Grid.GestureRecognizers>
        <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped" />
      </Grid.GestureRecognizers>
      ...
    </Grid>
    <Entry Grid.Column="1" Text="entry" />
  </Grid>

  <!-- 
  ... elements commented out
  --->

</DataTemplate>
...
<CollectionView ItemsSource="{Binding Items}"
                ItemTemplate="{StaticResource dataTemplate}"
                ... 
                />

相关问题