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;
}

posted @ 2017-12-17 23:01  小丑不悲伤  阅读(219)  评论(0)    收藏  举报