События ScrollViewer для Windows Phone 8

#c# #xaml #windows-phone-8 #listbox #scrollviewer

#c# #xaml #windows-phone-8 #список #scrollviewer

Вопрос:

У меня есть список. И элементами listbox могут быть изображения, текст, аудио, видео и т.д. Элементы извлекаются с помощью Интернета, и иногда список становится слишком длинным. Я хочу реализовать функцию «Перейти к началу» в моем списке, которые используются на многих веб-сайтах. Как только пользователи начинают прокрутку, появляется кнопка, которая выводит их наверх, и если они прокручивают обратно наверх, кнопка исчезает.

Проблема в том, что я не знаю, что делать. Если я отключу scrollviewer моего listbox и помещу listbox в scrollviewer, то я не знаю, какие из событий и свойств scrollviewer мне следует использовать?

Ответ №1:

Вы могли бы использовать событие ScrollStateChanged в RadDataboundListBox, чтобы увидеть, прокручивается ли список. Если это так, вы можете показать свою кнопку scrollToTop.

Что-то вроде этого:

 private void RadDataBoundListBox_ScrollStateChanged(object sender, ScrollStateChangedEventArgs e)
{
    if (e.NewState == ScrollState.Scrolling)
    {
        // Code to show the ScrollToTop button
    }
}
  

Вы могли бы поиграть с различными состояниями прокрутки, чтобы показывать и скрывать кнопку scrollToTop в разное время. (т. Е. Когда newState == ScrollState.Верхний предел, вы могли бы скрыть кнопку.)

Если вы привязываетесь к ItemsSource списка, вы можете использовать метод BringIntoView, как упоминалось выше.

 RadDataBoundListBox.BringIntoView(BoundObservableCollection[0]);
  

Я надеюсь, что это поможет.
Спасибо,
Джошуа

Комментарии:

1. Спасибо Джошуа. Но теперь я не использую RadDataBoundListBox, поэтому я найду свой собственный способ (по крайней мере, теперь у меня есть идея его реализации). С уважением, Анаг.

Ответ №2:

Я действительно не уверен, почему вы используете RadDataBoundListBox (возможно, вам нужна виртуализация), но вот несколько полезных элементов. Весь список можно найти здесь.

TopVisibleItem : Это свойство возвращает реализованный в данный момент верхний элемент просмотра. Этот элемент можно использовать для поиска индекса, до которого пользователь прокрутил. Итак, если индекс равен, скажем, 25, вы можете захотеть отобразить кнопку «Прокрутка вверх».
BringIntoView : Этот метод можно использовать при событии нажатия кнопки «Прокрутка вверх». Просто передайте элемент с индексом 0 в качестве параметра.

Надеюсь, это решит проблему.

Комментарии:

1. Спасибо. Но где я должен использовать TopVisibleItem?

2. @Code4A На ум приходит несколько вещей. Прокрутка остановлена. Манипуляция завершена.

3. Извините, но сейчас все немного изменилось. Сначала мне пришлось удалить ScrollViewer. Смотрите это . Во-вторых, нет ничего похожего на определенный индекс, который я мог бы использовать в TopVisibleItem . Я думаю, вы можете мне помочь. Но теперь вам нужно досконально разобраться в проблеме. Спасибо