WPF 表格(DataGrid)滚动定位目标到第一行

方法1:

参考https://bbs.csdn.net/topics/392038052

        public static void ScrollViewVerticalTo(DataGrid dataGrid, int index)
        {
            DataGridAutomationPeer lvap = new DataGridAutomationPeer(dataGrid);
            var svap = lvap.GetPattern(PatternInterface.Scroll) as ScrollViewerAutomationPeer;
            var scroll = svap.Owner as ScrollViewer;
            scroll.ScrollToVerticalOffset(index);
        }

 

方法2:

   public static void ScrollViewVerticalTo1(DataGrid dataGrid, int index)
        {
            ScrollViewer scrollViewer = GetVisualChild<ScrollViewer>(dataGrid);
            if (scrollViewer != null)
            {
                scrollViewer.ScrollToVerticalOffset(index);
            }
        }

        private static T GetVisualChild<T>(DependencyObject parent) where T : Visual
        {
            T child = default(T);

            int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
            for (int i = 0; i < numVisuals; i++)
            {
                Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
                child = v as T;
                if (child == null)
                {
                    child = GetVisualChild<T>(v);
                }
                if (child != null)
                {
                    break;
                }
            }
            return child;
        }

总结:

  一、2种方法的思路其实都是找到DataGrid中的ScrollViewer控件,然后利用ScrollViewer的ScrollToVerticalOffset()方法去定位到目标位置。

  二、直接用DataGrid的ScrollInotView方法,定位是不准确的。如果往大的行号定位,目标行就会出现在表格底部,用户使用表格就不方便。

  三、这里使用的2种方法经测试,性能相差不大,几万行的表格,定位时间都在1ms以内,可以放心使用。

posted on 2021-03-25 17:06  阿找  阅读(1640)  评论(0)    收藏  举报