Использовать DataGridView.FirstDisplayedScrollingRowIndex.
int itemNum=0;
private void Down_Click(object sender, RoutedEventArgs e)
{
itemNum++;
if (itemNum > dataGridView.Items.Count - 1) return;
//dataGridView.UpdateLayout(); <-- I don't think you need this
dataGridView.FirstDisplayedScrollingRowIndex = itemNum;
}
Извините, не понял, что в сетке WPF этого нет. Пункт о прокрутке остается в силе.
ScrollIntoView будет прокручиваться только в том случае, если элемент не отображается, и сделает его последней строкой, если он находится ниже текущих видимых строк, поэтому при прокрутке для просмотра 11-го элемента он выглядит так, как будто он прокручивается до второго.
Эта работа должна работать на вас. Вы прокручиваете до самого нижнего ряда, а затем прокручиваете до нужного вам ряда. Обратите внимание, что здесь вам действительно нужно обновить макет, иначе он проигнорирует результаты первой прокрутки перед повторной прокруткой вверх.
dataGridView.ScrollIntoView(DataGrid1.Items[DataGrid1.Items.Count - 1]);
dataGridView.UpdateLayout();
dataGridView.ScrollIntoView(DataGrid1.Items[itemIndex]);