/// <summary>
/// 将指定父级的下级索引元素,显示在视野下,使其可见
/// </summary>
/// <param name="control">父级</param>
/// <param name="i">需要可见的子集索引</param>
private void BringIndexIntoView(ItemsControl control, int i)
{
ItemsControl itemsControl = control;
itemsControl.ApplyTemplate();
var itemsPresenter = VisualTreeExtension.GetElements<ItemsPresenter>(itemsControl).FirstOrDefault();
if (itemsPresenter == null)
{
return;
}
itemsPresenter.ApplyTemplate();
var virtualizingStackPanel = (VirtualizingStackPanel)VisualTreeHelper.GetChild(itemsPresenter, 0);
virtualizingStackPanel.BringIndexIntoViewPublic(i);
}
代码示例:
var index = 55;//需要定位的索引
BringIndexIntoView(lstbox, index);
var item = lstbox.ItemContainerGenerator.ContainerFromIndex(index);
if (item is ListBoxItem lstitem)
{
lstitem.BringIntoView();//视图定位
}