ScrollViewer 滚动条定位
//当前滚动条位置
ScrollViewer sv = GetChildObject<ScrollViewer>(ctlIPBedCardListBox, "s");
var currentScrollPosition = sv.VerticalOffset;
var point = new Point(0, currentScrollPosition);
//计算出目标位置并滚动
var item = GetChildObject123<ListBoxItem>(ctlIPBedCardListBox);
var targetPosition = item.TransformToVisual(sv).Transform(point);
sv.ScrollToVerticalOffset(targetPosition.Y);
参考 https://www.cnblogs.com/wpinfo/p/7063584.html
public static T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
{
DependencyObject child = null;
T grandChild = null;
for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
{
child = VisualTreeHelper.GetChild(obj, i);
if (child is T && (((T)child).Name == name && !string.IsNullOrEmpty(name)))
{
return (T)child;
}
else
{
grandChild = GetChildObject<T>(child, name);
if (grandChild != null)
return grandChild;
}
}
return null;
}
public static T GetChildObject123<T>(DependencyObject obj) where T : FrameworkElement
{
DependencyObject child = null;
T grandChild = null;
for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
{
child = VisualTreeHelper.GetChild(obj, i);
ListBoxItem grandChilda = child as ListBoxItem;
if (grandChilda != null && grandChilda.IsSelected)
{
return (T)child;
}
else
{
grandChild = GetChildObject123<T>(child);
if (grandChild != null)
return grandChild;
}
}
return null;
}

浙公网安备 33010602011771号