Datagrid或者listview 中想要把相应的项 滚动到当前可见的位置, 必须满足2个条件:
1) 必须去掉虚拟化
VirtualizingStackPanel.IsVirtualizing ="False"
2) 调用ScrollToView
//Bring current selected item to view
if(null != grdStudyList. SelectedItem && 0 != grdStudyList .Columns. Count)
{
//first focus the grid
grdStudyList.Focus ();
//then create a new cell info, with the item we wish to edit and the column number of the cell we want in edit mode
DataGridCellInfo cellInfo = new DataGridCellInfo(grdStudyList .SelectedItem, grdStudyList.Columns [0]);
//set the cell to be the active one
grdStudyList.CurrentCell = cellInfo;
//scroll the item into view
grdStudyList.ScrollIntoView (grdStudyList. SelectedItem);
}
3)如果不去掉虚拟化, VirtualizingStackPanel.IsVirtualizing ="True"
则, 调用如下语句:
private void ScrollItemInSelector (Selector dtg, object needScrollItem)
{
//Bring current selected item to view
if (null == dtg && null != needScrollItem )
{
//first focus the grid
dtg.Focus ();
dtg.SelectedItem = needScrollItem;
dtg.Items .MoveCurrentTo( needScrollItem);
ScrollViewer scv = FindVisualChild< ScrollViewer>(dtg );
if (null != scv
&& ( dtg.Items .CurrentPosition < scv.VerticalOffset - scv. ViewportHeight || dtg.Items .CurrentPosition > scv.VerticalOffset + scv. ViewportHeight)
)
{
scv.ScrollToVerticalOffset (dtg. Items.CurrentPosition );
}
}
}