【发布时间】:2013-04-23 16:21:31
【问题描述】:
可以为 ListBox 设置偏移量吗?我能找到的只是滚动到一个元素,但我需要将 ListBox 滚动到任何位置。
作为替代方案,还有其他组件可以使他们的项目虚拟化,并且我可以控制偏移量吗?
【问题讨论】:
可以为 ListBox 设置偏移量吗?我能找到的只是滚动到一个元素,但我需要将 ListBox 滚动到任何位置。
作为替代方案,还有其他组件可以使他们的项目虚拟化,并且我可以控制偏移量吗?
【问题讨论】:
您可以获取 ListBox 的 ScrollViewer 并使用它的ScrollToVerticalOffset-method. 来获取 ScrollViewer,例如,您可以连接到 ListBox 的 Loaded-event,如下所示:
XAML:
<ListBox Loaded="HookScrollViewer">
代码隐藏:
private void HookScrollViewer(object sender, RoutedEventArgs e)
{
var element = (FrameworkElement)sender;
var scrollViewer = ControlHelpers.FindChildOfType<ScrollViewer>(element);
if (scrollViewer == null)
return;
this.myScrollViewer = scrollViewer;
}
ControlHerlpers.FindChildOfType 方法是这样实现的:
public static T FindChildOfType<T>(DependencyObject root) where T : class
{
var queue = new Queue<DependencyObject>();
queue.Enqueue(root);
while (queue.Count > 0)
{
var current = queue.Dequeue();
for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
{
var child = VisualTreeHelper.GetChild(current, i);
var typedChild = child as T;
if (typedChild != null)
{
return typedChild;
}
queue.Enqueue(child);
}
}
return null;
}
现在您在 myScrollViewer 成员中有 ListBox 的 ScrollViewer,您可以直接访问它的方法。例如,要滚动底部,您可以调用:
this.myScrollViewer.ScrollToVerticalOffset(double.MaxValue);
【讨论】: