Xamarin:当列表视图包含在CarouselViewControl内部时,滚动到ListView的位置

是否可以直接访问CarouselViewControl中包含的列表视图? 我有一个左右旋转的旋转木马,每页内都有一个列表视图。但是,由于ListView包含在CarouselViewControl中,所以我无法直接通过代码调用ScrollTo()函数来访问它,而且ScrollTo函数也不能绑定。我还尝试通过FindVisualChildren扩展循环遍历所有呈现的控件,并且看起来当旋转木马呈现时,它不会将列表视图呈现为列表视图,因此我看不到任何可以滚动到特定位置的方式垂直位置。

我正在尝试创建一个字母选择器(类似于android音乐播放器上的那个),以便当用户单击一个字母时,它将它们带到列表视图中的那个位置。但是,它也必须位于轮播视图的内部,以便在其他页面之间滑动时显示不同的列表。

是否有任何其他方法可以实现这一目标?

<controls:CarouselViewControl x:Name="Recipelist"  Orientation="Horizontal" InterPageSpacing="10" ItemsSource="{Binding ProductList}" 
                              VerticalOptions="FillAndExpand" PositionSelected="Recipelist_PositionSelected" 
                              HorizontalOptions="FillAndExpand" BackgroundColor="Transparent">
    <controls:CarouselViewControl.ItemTemplate>
        <DataTemplate>
            <Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                <ListView x:Name="sublist" Margin="5,10,-10,-10" ItemSelected="Recipelist_ItemSelected" IsGroupingEnabled="True" 
                          GroupDisplayBinding="{Binding Key}" ItemsSource="{Binding ProductsList}" VerticalScrollBarVisibility="Never" 
                          SeparatorVisibility="None" HasUnevenRows="True" BackgroundColor="Transparent" SelectedItem="{Binding ScrolledItem}">

                    <ListView.GroupHeaderTemplate>
                        <DataTemplate>
                            <ViewCell Height="1">
                                <Label Text="" />
                            </ViewCell>
                        </DataTemplate>
                    </ListView.GroupHeaderTemplate>

                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" MinimumHeightRequest="{StaticResource ImageSize}" 
                                      Padding="15,0">
                                    <Frame HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Padding="0" Margin="0,5,0" CornerRadius="10" 
                                           BackgroundColor="#FCFAF8" BorderColor="#F37623" HasShadow="True">
                                        <Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="100"/>
                                            </Grid.RowDefinitions>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="50"/>
                                                <ColumnDefinition Width="*"/>
                                            </Grid.ColumnDefinitions>
                                            <Image Source="{Binding Image}" Grid.Column="0" Grid.Row="0" HorizontalOptions="FillAndExpand"  VerticalOptions="StartAndExpand" Aspect="AspectFit"/>
                                            <Grid Grid.Row="0" Grid.Column="1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" RowSpacing="0">
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                    <RowDefinition Height="Auto"/>
                                                </Grid.RowDefinitions>
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                                                </Grid.ColumnDefinitions>
                                                <Label Text="{Binding ProductNane}" Grid.Row="0" Grid.Column="0" HorizontalOptions="StartAndExpand" VerticalOptions="StartAndExpand" FontAttributes="Bold" FontSize="Medium" TextColor="Black" BackgroundColor="Transparent" Margin="0,0"/>
                                                <Image Source="{Binding HeartImage}" Grid.Row="0" Grid.Column="1" HorizontalOptions="End" VerticalOptions="StartAndExpand" BackgroundColor="Transparent" HeightRequest="30" WidthRequest="30" Aspect="AspectFit" Margin="0,1" >
                                                    <Image.GestureRecognizers>
                                                        <TapGestureRecognizer Tapped="HreatImageclicked"/>
                                                    </Image.GestureRecognizers>
                                                </Image>
                                                <Label Text="{Binding Description}" Grid.Row="1" Grid.Column="0" Style="{StaticResource StandardLabel}" FontSize="Small" MaxLines="2" LineBreakMode="TailTruncation" />
                                                <lv:RatingImage Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" ImageDeselect="star_line.png" ImageSelect="yellow_star.png" ImageHeight="12" ImageWidth="12"
                                                   Itemsnumber="5" InitialValue="{Binding Rating}" HorizontalOptions="End" VerticalOptions="End"
                                                   SpaceBetween="2" IsReadOnly="True" Margin="0,2,0" />
                                            </Grid>
                                        </Grid>
                                    </Frame>

                                    <Grid.GestureRecognizers>
                                        <TapGestureRecognizer Tapped="RecipeDetailPage" />
                                    </Grid.GestureRecognizers>
                                </Grid>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>
        </DataTemplate>
    </controls:CarouselViewControl.ItemTemplate>
</controls:CarouselViewControl>

谢谢!

fengziyun 回答:Xamarin:当列表视图包含在CarouselViewControl内部时,滚动到ListView的位置

  

我无法通过代码直接访问它来调用ScrollTo()函数,也无法绑定ScrollTo函数。

您想从CarouselViewControl DataTemplate获取ListView,我认为这是不合理的,因为它只是DataTemplate,我在DataTemplate中找不到任何访问控件的方法。

因此,我建议您可以创建一个ExtendedScrollView并将ScrollTo方法公开给一个只读的可绑定ICommand属性。将其绑定到您的视图模型对应的命令,然后从那里使用它。

您可以在任何地方重用该控件,并且它可以支持任何类型的滚动方案。您需要创建一个要用作命令参数的对象,该对象将嵌入ScrollTo的参数,并在ExtendedScrollView的可绑定ICommand中使用它。

本文链接:https://www.f2er.com/3094703.html

大家都在问