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以内,可以放心使用。
浙公网安备 33010602011771号