DataGrid 显示选中的item

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

posted @ 2013-07-03 14:29  muzizongheng  阅读(636)  评论(0编辑  收藏  举报
如果我们时时忙着展现自己的知识, 将何从忆起成长所需的无知?