首页 > 解决方案 > Xamarin Forms - ListView 中项目上的 PanGestureRecognizer 逐步影响下一个隐藏项目

问题描述

我有一个 ListView 并通过 listView.ItemsSource = list; 设置项目 在 xml 中的每个项目上,我都有一个 GestureRecognizer - PanGestureRecognizer 和 PanUpdated="PanUpdateFunction"。

好吧,在这个函数上,我通过 sender 参数获取项目并进行一些计算以初始化我需要的 X。

Frame frameThis = (Frame)sender;
var calcXScale = -((frameThis.Width / 7) * 5);
var scalePixels = -20;
switch (e.StatusType)
  {
    case GestureStatus.Running:
      if (e.TotalX < scalePixels)
      {
        await frameThis.TranslateTo(calcXScale, 0, 175, Easing.Linear);
        break;
      }
      if (e.TotalX > -(scalePixels))
      {
        await frameThis.TranslateTo(0, 0, 175, Easing.Linear);
        break;
      }

      break;
  }
}

当我将元素向左滑动并且结果超过我的目标时,元素会向左移动,这就是我需要的。但是有一个类似于错误的东西 - ListView 中隐藏在屏幕上的下一个项目也向左滑动,下一个,下一个,等等。

我的意思是:在屏幕视图上我有 4 个项目和 10 个隐藏。当我滑动第一个并滚动到底部时,第 5 个和第 9 个也向左滑动。如果我滑动第 2 个,则第 6 个和第 10 个被滑动。

标签: c#listviewxamarinuigesturerecognizeruipangesturerecognizer

解决方案


尝试使用 RetainElement 作为 ListView 的缓存策略:

<ListView CachingStrategy="RetainElement">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <!-- ... -->
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

推荐阅读