The best way I've used so far is to use the VisualTreeHelper
class to find the correct ScrollViewer
object (grid or no grid). I've used this in several projects.
Try this if any of you need it:
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;
}
Note: I typically use ListBox classes and would pass it directly to this function.
Happy programming :)