如何解决Xamarin.Forms:如何自动隐藏第一个CollectionView
我正在使用 Xamarin.Forms应用,该应用将包含一个包含2个 CollectionView 项的页面:
- 将显示事件的水平 CollectionView
- 将显示帖子的垂直 CollectionView
我希望用户一开始在第二个列表上滚动,就逐渐隐藏第一个列表。
我们可以在 Syncfusion 的sample上找到此行为:但是他们使用 SfRotator 作为水平列表的控件:
我尝试在页面上重现相同的行为,但无法正常工作。在垂直滚动到第一个列表本身之前,不会隐藏我的水平列表。如果在第二个垂直列表上滚动,则第一个列表仍然可见:
我的XAML如下:
<ContentPage.Content>
<RefreshView x:DataType="vm:NewsViewModel"
IsRefreshing="{Binding IsRefreshing}"
Command="{Binding RefreshCommand}">
<ScrollView>
<StackLayout Padding="16" Spacing="16">
<CollectionView x:Name="EventsListView"
ItemsSource="{Binding Events}"
HeightRequest="250"
VerticalScrollBarVisibility="Never"
SelectionMode="None">
<CollectionView.ItemsLayout>
<LinearItemsLayout Orientation="Horizontal"
ItemSpacing="20" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<ctrl:ShadowFrame BackgroundColor="Red">
<StackLayout x:DataType="model:Event" >
<Label Text="{Binding Name}" />
<Image Source="{Binding Image}" />
</StackLayout>
</ctrl:ShadowFrame>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<CollectionView x:Name="NewsListView"
ItemsSource="{Binding News}"
VerticalScrollBarVisibility="Never"
SelectionMode="None">
<CollectionView.ItemsLayout>
<LinearItemsLayout Orientation="Vertical"
ItemSpacing="20" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<ctrl:ShadowFrame>
<StackLayout x:DataType="model:News">
<Label Text="{Binding Description}" />
<Label Text="{Binding Date}" />
<Image Source="{Binding Image}" />
</StackLayout>
</ctrl:ShadowFrame>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</ScrollView>
</RefreshView>
</ContentPage.Content>
=>有没有办法做到这一点?
解决方法
快速提醒您不要在其他可滚动元素内使用可滚动元素,通常会破坏两者的工作方式,Quoting:
Xamarin不建议使用ListView,WebView或ScrollView 在ScrollView中。 Microsoft Xamarin.Forms Official Documentation 说ScrollViews不应该嵌套。此外,ScrollViews 不应与其他提供滚动功能的控件嵌套在一起,例如 ListView和WebView。
这就是发生的事情:
ScrollView
实际上不是滚动,而 Vertical CollectionView
是给出幻觉的一种该页面正在滚动,这意味着 Horizontal (水平)始终位于顶部。
如何解决?
要解决此问题,您应该删除垂直CollectionView
,并使用某种“ Repeater View”,此Post将指导您如何实现它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。