Xamarin.Forms ListView有一些趋势,在一些最大高度后停止拉伸。当我在ListView中放置太多项目时,它会创建滚动条,并且当我添加更多滚动条时,它的高度不会增加。
如果带有滚动条的<ScrollView>
位于具有滚动条的<ScrollView>
<StackLayout>
<!-- some buttons and labels -->
<ListView ItemsSource="{Binding Data}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="20">
<!-- Some information -->
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ScrollView>
对象内,则可能会让用户感到困惑。布局bahaves不自然,迫使用户滚动到listview的末尾,以便能够继续滚动scrollView。
所以,总结一下:
如何在ListView中禁用滚动条,强制它具有所有内部子项的高度?
儿童没有平等的高度。此外,他们可以在应用程序生命周期内更改。
t1 <- head(mtcars)[1:3]
t2 <- head(mtcars)[4:6]
knitr::kable(list(t1, t2))
我测试应用的平台:Windows 10 UWP。
答案 0 :(得分:5)
Listview
已经内置了滚动机制,您绝不应该尝试将ListView
置于ScrollView
内。
ListView
使用UI虚拟化,这意味着它只会在可见视图中创建所需的项目,而不是所有项目。例如,如果您加载240个国家/地区,它实际上只会创建20个国家/地区,当您滚动时,它会创建更多或重复使用现有项目。
将ListView
放在ScrollView
内,您将禁用UI虚拟化。
事实上,Xamarin.Forms
对滚动没有任何特殊性,它是底层平台Android / iOS / Windows的功能,提供UI虚拟化以提高速度。
答案 1 :(得分:5)
我也遇到同样的问题,我通过使用Bindable解决了 滚动视图中的StackLayout。
<ScrollView>
<StackLayout BindableLayout.ItemsSource="{Binding ItemSource}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Label Text="{Binding Name}" />
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
答案 2 :(得分:0)
我有同样的问题,其中我有一个CollectionView列出了很多记录。每条记录可能都有一个或多个我需要显示而不滚动的子元素。
我通过设置内部ListView滚动属性并在其顶部添加一个框视图来解决此问题,因此用户无法滚动列表。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- inner list view -->
<ListView Grid.Row="0" Grid.Column="0" VerticalScrollBarVisibility="Never" SelectionMode="None">
<!-- content here -->
</ListView>
<BoxView Grid.Row="0" Grid.Column="0" />
</Grid>