【发布时间】:2011-05-11 09:35:52
【问题描述】:
更新:
这可能是一个简单或复杂的问题,但在 wpf 中,我有一个列表框,我用列表中的 datatemplate 填充该列表框。
有没有办法找出特定的数据模板项是否在视口中,即我已经滚动到它的位置并且它是可见的?
目前我挂上了 listbox_ScrollChanged 事件,这给了我 ScrollChangedEventArgs,但我还没有找到合适的属性...
任何帮助将不胜感激,谢谢!
【问题讨论】:
更新:
这可能是一个简单或复杂的问题,但在 wpf 中,我有一个列表框,我用列表中的 datatemplate 填充该列表框。
有没有办法找出特定的数据模板项是否在视口中,即我已经滚动到它的位置并且它是可见的?
目前我挂上了 listbox_ScrollChanged 事件,这给了我 ScrollChangedEventArgs,但我还没有找到合适的属性...
任何帮助将不胜感激,谢谢!
【问题讨论】:
见this问题
对于特定的 ListBox,您可以这样做
private bool IsControlVisibleToUser(Control control)
{
ListBoxItem listBoxItem =
listBox.ItemContainerGenerator.ContainerFromItem(control) as ListBoxItem;
if (listBoxItem != null)
{
return IsUserVisible(listBoxItem, listBox);
}
return false;
}
以及我链接的问题中的方法
private bool IsUserVisible(FrameworkElement element, FrameworkElement container)
{
if (!element.IsVisible)
return false;
Rect bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight));
Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
return rect.Contains(bounds.TopLeft) || rect.Contains(bounds.BottomRight);
}
【讨论】: