См. этот вопрос
Для 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);
}