如何知道列表框项何时进入视图?



是否有事件告诉我列表框项何时进入视图?

我遇到的问题是我可以有几千个元素作为我的ListBox.ItemSource。每个元素都会生成一个位图(这需要一段时间(,所以如果我只是把这个位图生成放在创建集合的构造函数中,创建集合将永远需要很长时间。相反,我想在项目进入视图时延迟位图生成。

有没有办法做到这一点?理想情况下,我不希望遍历所有项目并检查它们是否可见。

是否有事件告诉我列表框项何时进入视图?

您可以处理ListBoxItem容器的Loaded事件:

<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<EventSetter Event="Loaded" Handler="OnItemLoaded" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>

private void OnItemLoaded(object sender, RoutedEventArgs e)
{
ListBoxItem lbi = sender as ListBoxItem;
object dataItem = lbi.DataContext;
//...
}

您可以使用SelectedItem来获取初始选择,然后您可以为其上方和下方的几个生成位图 - 确切的数字将取决于位图的大小和ListBox的大小。

我建议你生成一个比你可以看到的稍微大一点的范围,这样当你向上/向下平移列表时,你不会一直等待渲染新的位图;想想谷歌地图 - 如果你平移一小段距离,图像已经在那里,只有当你平移更大的距离时,你才需要等待它重新绘制。

当您向上/向下平移列表时,您可以使用IsMouseOver查找当前悬停在上面的项目,然后相应地更新渲染的位图,同样比您看到的略多。

最新更新