WP7中的ListBox偏移量

时间:2012-01-31 11:16:28

标签: windows-phone-7 listbox

可以设置ListBox的偏移量吗?我能找到的只是滚动到一个元素,但我需要将ListBox滚动到任何位置。

作为替代方案,还有其他任何组件可以虚拟化他们的项目,我可以控制偏移吗?

1 个答案:

答案 0 :(得分:5)

您可以获取ListBox的ScrollViewer并使用其ScrollToVerticalOffset-method.要获取ScrollViewer,您可以连接到ListBox的Loaded事件,如下所示:

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