You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中ScrollView嵌套CollectionView的滚动交互问题

解决方案

要实现无缝滚动且让CollectionView仅占用自身所需空间,按以下步骤修改:

  • 禁用CollectionView的滚动功能:将外层和内层的CollectionView都设置IsScrollEnabled="False",让它们不再处理滚动事件,交由外部ScrollView统一接管。
  • 移除固定高度限制:删除外层CollectionView的MinimumHeightRequest="300",让它根据内容自动调整高度。
  • 修正Grid布局结构:给Grid的子控件指定Row,避免布局重叠,确保内容按顺序排列。

修改后的完整代码:

<ScrollView>
    <Grid x:Name="ContentContainer" Padding="0,10,0,20" RowDefinitions="*,Auto">
        <!--  overview Frame  -->
        <Border Grid.Row="0" HeightRequest="-1" Style="{StaticResource BorderContainerStyle}">
            Container with general information
        </Border>
        <Grid Grid.Row="1">
            <CollectionView ItemsSource="{Binding SubActivities}" IsScrollEnabled="False">
                <CollectionView.ItemsLayout>
                    <GridItemsLayout
                        Orientation="Vertical"
                        Span="1"
                        VerticalItemSpacing="5" />
                </CollectionView.ItemsLayout>
                <CollectionView.ItemTemplate>
                    <DataTemplate x:DataType="activityDetail:SubActivityViewModel">
                        <StackLayout Spacing="5">
                            <Border IsVisible="{Binding ShowSubActivity}" Style="{StaticResource BorderContainerStyle}">
                                <Border.GestureRecognizers>
                                    <TapGestureRecognizer
                                        Command="{Binding Path=ShowAttachments, Source={RelativeSource AncestorType={x:Type activityDetail:ActivityDetailViewModel}}}"
                                        CommandParameter="{Binding .}"
                                        NumberOfTapsRequired="2" />
                                </Border.GestureRecognizers>
                                <templates:DefectAttachmentTemplate BindingContext="{Binding}" />
                            </Border>
                            <CollectionView ItemsSource="{Binding VisibleAttachments}" IsScrollEnabled="False">
                                <CollectionView.ItemsLayout>
                                    <GridItemsLayout
                                        Orientation="Vertical"
                                        Span="{Binding GridColumns}"
                                        VerticalItemSpacing="5" />
                                </CollectionView.ItemsLayout>
                                <CollectionView.ItemTemplate>
                                    <DataTemplate x:DataType="activityDetail:AttachmentViewModel">
                                        <Border Padding="0" Style="{StaticResource BorderContainerStyle}">
                                            <StackLayout>
                                                <templates:ImageControlAttachmentTemplate BindingContext="{Binding}" />
                                            </StackLayout>
                                        </Border>
                                    </DataTemplate>
                                </CollectionView.ItemTemplate>
                            </CollectionView>
                        </StackLayout>
                    </DataTemplate>
                </CollectionView.ItemTemplate>
            </CollectionView>
        </Grid>
    </Grid>
</ScrollView>

说明

  • 禁用CollectionView滚动后,控件会自动计算所有子项的总高度,自身高度完全适配内容,不会出现内部滚动条。
  • 外部ScrollView包含整个页面内容,滚动时无需区分区域,在CollectionView区域也能直接滚动到页面顶部,实现无缝滚动体验。

内容的提问来源于stack exchange,提问作者Dom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:22:15