我有这个示例应用程序,每当我滚动它时,我试图在列表视图中获取第一个可见组。当我向上滚动以查看列表视图中的初始项时,会发生此问题。它会更新顶部可见组,但只有在列表完成滚动时才会更新它。因此,如果我进行轻弹滚动(点击,滚动并从屏幕上移开手指并让其按惯性滚动),有时候,在更新顶部可见组值时会滞后。这是我的示例应用的链接:https://1drv.ms/u/s!AhChIerZubKRh3C4DhCZ3K7jpm6u
编辑:我上传了视频以显示问题所在。在这里,您可以看到顶部文本块只有在滚动完全停止后才会更新:https://1drv.ms/v/s!AhChIerZubKRh3pmL6IsQNi0Mrm1
答案 0 :(得分:1)
问题出在滚动过程中,TextBlock
名为" tbHeader"的位置是ListView
中的真实位置,它更像是在那里用于显示标题是假的(我会在显示位置显示标题TextBlock
),当滚动停止时,它就像标题TextBlock
一样插入标题&#39 ; s从其阅读位置显示位置。
所以这是我的解决方案,我们找不到所有TextBlock
名为" tbHeader"此外,我们可以在此ListViewItemPresenter
中找到所有ListView
并找到第一个显示项目,最后显示其" DateTimePropertyOfClassA"(标题)属性。
sv.ViewChanged += (ss, ee) =>
{
//IEnumerable<TextBlock> tblocks = FindVisualChildren<TextBlock>(lv).Where(x => x.Name == "tbHeader");
//if (tblocks != null)
//{
// foreach (TextBlock tblock in tblocks)
// {
// if (IsVisibileToUser(tblock, sv))
// {
// first.Text = tblock.Text;
// break;
// }
// }
//}
IEnumerable<ListViewItemPresenter> presenters = FindVisualChildren<ListViewItemPresenter>(lv);
if (presenters != null)
{
foreach (ListViewItemPresenter presenter in presenters)
{
if (IsVisibileToUser(presenter, sv))
{
var content = presenter.Content as ClassA;
first.Text = content.DateTimePropertyOfClassA.ToString();
break;
}
}
}
};
其他代码仍然是我们讨论的最后一个案例。