适用于LixtBox的,开启UI虚拟化时,某些时候需要定位到还没加载的项,比如自动选中某项,视图自动移过去等等

 1      /// <summary>
 2         /// 将指定父级的下级索引元素,显示在视野下,使其可见
 3         /// </summary>
 4         /// <param name="control">父级</param>
 5         /// <param name="i">需要可见的子集索引</param>
 6         private void BringIndexIntoView(ItemsControl control, int i)
 7         {
 8             ItemsControl itemsControl = control;
 9             itemsControl.ApplyTemplate();
10             var itemsPresenter = VisualTreeExtension.GetElements<ItemsPresenter>(itemsControl).FirstOrDefault();
11             if (itemsPresenter == null)
12             {
13                 return;
14             }
15             itemsPresenter.ApplyTemplate();
16             var virtualizingStackPanel = (VirtualizingStackPanel)VisualTreeHelper.GetChild(itemsPresenter, 0);
17             virtualizingStackPanel.BringIndexIntoViewPublic(i);
18         }

 

代码示例:

 1        var index = 55;//需要定位的索引
 2             BringIndexIntoView(lstbox, index);
 3             var item = lstbox.ItemContainerGenerator.ContainerFromIndex(index);
 4             if (item is ListBoxItem lstitem)
 5             {
 6                 lstitem.BringIntoView();//视图定位             
         }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章