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