Смещение ListBox в WP7 - PullRequest
       1

Смещение ListBox в WP7

2 голосов
/ 31 января 2012

Можно ли установить смещение для ListBox? Все, что я могу найти, это прокрутить до элемента, но мне нужно прокрутить ListBox в любую позицию.

Как альтернатива, есть какие-то другие компоненты, которые могут виртуализировать свои предметы, и что я могу контролировать смещение?

1 Ответ

5 голосов
/ 31 января 2012

Вы можете получить ScrollViewer для ListBox и использовать его ScrollToVerticalOffset-method. Чтобы получить ScrollViewer, вы можете, например, подключиться к Loaded-событию ListBox, как показано ниже:

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

Теперь у вас есть элемент прокрутки ListBox вчлен myScrollViewer, и вы можете напрямую получить доступ к его методам.Например, для прокрутки внизу вы можете позвонить:

this.myScrollViewer.ScrollToVerticalOffset(double.MaxValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...