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 );
}
}
}