Лучший способ, который я использовал до сих пор, это использовать класс VisualTreeHelper
, чтобы найти правильный объект ScrollViewer
(сетка или нет сетки). Я использовал это в нескольких проектах.
Попробуйте, если кому-то из вас это понадобится:
private static bool ScrollToOffset(DependencyObject n, double offset)
{
bool terminate = false;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(n); i++)
{
var child = VisualTreeHelper.GetChild(n, i);
if (child is ScrollViewer)
{
(child as ScrollViewer).ScrollToVerticalOffset(offset);
return true;
}
}
if (!terminate)
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(n); i++)
terminate = ScrollToOffset(VisualTreeHelper.GetChild(n, i), offset);
return false;
}
Примечание: я обычно использую классы ListBox и передаю его непосредственно этой функции.
Счастливого программирования:)