【问题标题】:ListBox offset in WP7WP7 中的 ListBox 偏移量
【发布时间】:2013-04-23 16:21:31
【问题描述】:

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

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

【问题讨论】:

    标签: windows-phone-7 listbox


    【解决方案1】:

    您可以获取 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);
    

    【讨论】:

    • 嗨,迈克尔,您能帮帮我吗?我在同一页面上有 2 个列表框,并且数据混淆了,如何使用上面的代码获取第二个列表框?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多