如何在ListView中禁用滚动?

时间:2016-06-26 14:16:42

标签: xamarin xamarin.forms

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。

3 个答案:

答案 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>