c# - 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 个被滑动。
解决方案
尝试使用 RetainElement 作为 ListView 的缓存策略:
<ListView CachingStrategy="RetainElement">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<!-- ... -->
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
推荐阅读
- python - Airflow 操作员是否需要返回任何内容才能正常运行?
- python - 计算子串计数
- java - Spring Cache 未创建代理类
- android - Capacitor 应用程序上的 Espresso 测试显示“无法在 45 秒内启动 Intent Intent”
- domain-driven-design - 如何在处理不同地区的领域专家语言时保持 UL 一致
- count - Halcon - 计算孔数
- fastapi - FastAPI @repeat_every 如何防止并行 defcheduled_task() 实例
- javascript - 日期过去时删除元素
- javascript - 如何使列表显示在 React 中的正确列和行中
- mysql - MySQL - 我想在不使用 PHP 的情况下根据选择查询更新多行