【问题标题】:How to detect hitting the bottom of a grid within a scrollview in Xamarin Forms如何检测在 Xamarin Forms 的滚动视图中击中网格的底部
【发布时间】:2016-01-28 10:01:04
【问题描述】:

我正在使用 Xamarin.Forms 在网格中(在 ScrollView 中)显示来自 Web 源的项目。

当用户点击网格底部时,我想加载更多项目并将它们添加到网格中。我知道通常 ListView 更适合以这种方式显示数据(并且 ListView 有一个 ItemAppearing 事件),但遗憾的是我必须使用网格。

如果有帮助,我可以发布一些代码,但我不确定这里是否有必要。

提前致谢 编辑:这是我非常无聊的布局文件:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyProject.MyNamespace.LayoutName"
             SizeChanged="OnPageSizeChanged">
  <ScrollView >
    <AbsoluteLayout x:Name="myLayout">
      <Grid x:Name="GridForItems" RowSpacing="6" ColumnSpacing="6">
      </Grid>
    </AbsoluteLayout>
  </ScrollView>
</ContentPage>

我以编程方式添加所有行、列和项目。

【问题讨论】:

  • "如果有帮助,我可以发布一些代码,但我不确定这里是否有必要。"如果可以的话最好。
  • @Ian 你到底在找什么?

标签: xaml xamarin xamarin.forms


【解决方案1】:

由于我的原始问题没有得到令人满意的答案(如何检测到 scrollview 的底部),并且我在网上的其他任何地方都没有找到解决方案,我将发布我是如何解决这个问题的。

请注意,这可能不是一个优雅的解决方案,如果您有更好的答案,请发布它,我会接受它作为最佳答案。

我所做的是为 ScrollView 的 Scrolled Event 实现一个委托。

myScrollView.Scrolled += (sender, e) => { onScrolled(); };

在我的 onScrolled 中,我有以下 if 子句来确定我是否已经到达 ScrollView 的底部:

 private void onScrolled()
 {
    if(myScrollView.ScrollY >= myScrollView.ContentSize.Height - myScrollView.Height)
    {
      //Handle hitting the bottom
    }
 }

【讨论】:

    【解决方案2】:

    当你有一个项目列表时,你应该使用ListView 来显示它。在此 ListView 的 DataTemplate 中,您可以指定如何显示每个项目(如果您确实需要网格,请在此处使用网格)。

    在Listview中,可以实现如下代码检测底部:

    myListview.ItemAppearing += (sender, e) =>
    {
        // CHECK HERE
        if(e.Item.Id == MyItems[MyItems.Count - 1].Id)
        {
            // YOU HIT THE BOTTOM
        } 
    }
    

    为什么要使用 Listview?看this forum thread about Dynamic Grids。

    【讨论】:

    • 我遇到的问题是每行显示多个项目,但也有动态数量的行(取决于屏幕尺寸/方向),我可以很容易地用网格做到这一点,所以我会喜欢留下来。你是在告诉我用网格做这件事是不可能的吗?
    • 当你有一个动态的项目来源时,你应该使用一个列表视图(我在我的答案中放了一个链接)。作为一种工作方式:您可以实现一个包含(例如)3 个项目的模型。在 Listview 中,您可以为每个模型实现一个网格并显示这 3 个项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2019-12-24
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多