Итак, наконец, я получаю ViewportControl, от которого так долго искал LongListSelector, но когда я пытаюсь прокрутите до определенного значения смещения, используя приведенные ниже методы, я не могу прокрутить до смещения. Я использую открытый статический класс GlobalVars
(глобальные переменные) для передачи данных между страницами.Прокрутка LongListSelector по вертикальному смещению путем получения его Viewport - не может добавить динамическое значение в SetViewportOrigin()
Таким образом, когда пользователь выбирает item
из LongListSelector -> Переходит к ItemDetail Страница этим:
private void llsArtists_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
GetFirstVisibleItem(llsArtists);
var artist = (Artist)e.AddedItems[0];
GlobalVars._artistName = artist.ArtistName;
GetSelectedArtist(artist.ArtistName);
NavigationService.Navigate(new Uri("/ArtistDetail.xaml", UriKind.Relative));
}
, а затем возвращается к той же странице, нажав Back
ключ, я хотел бы, чтобы пользователь на той же позиции, что и последний (на данный момент он переходит к первому индексу). Таким образом, я получаю Viewport и вертикальное смещение:
private void GetFirstVisibleItem(LongListSelector lls)
{
var offset = FindViewport(lls).Viewport.Top;
GlobalVars._artistScrollOffset = offset;
}
private static ViewportControl FindViewport(DependencyObject parent)
{
var childCount = VisualTreeHelper.GetChildrenCount(parent);
for (var i = 0; i < childCount; i++)
{
var elt = VisualTreeHelper.GetChild(parent, i);
if (elt is ViewportControl)
return (ViewportControl)elt;
var result = FindViewport(elt);
if (result != null)
return result;
}
return null;
}
и, наконец, ScrollToOffset
void ScrollToOffset()
{
Point loc = new Point();
loc.X = 0;
//loc.Y = Math.Round(GlobalVars._artistScrollOffset, 2);
loc.Y = GlobalVars._artistScrollOffset;
FindViewport(llsArtists).SetViewportOrigin(loc);
}
Проблема: если я явно задал значение Y для Point
loc, как я установил loc.X = 0
, он просто отлично работает! LongListSelector отлично работает! Но, если бы я хотел, чтобы это была переменная, которая именно то, что мне бы хотелось, - ЭТО ПРОСТО НЕ РАБОТАЕТ! Я нахожу это очень странным? Что может быть причиной этого? Любая помощь будет оценена!
Hi. Я действительно очищаю ItemsSource, а затем снова извлекаю элементы, поскольку в противном случае пользователь переходит на одну страницу, возвращаясь назад. Он добавляет дубликаты в коллекцию. : S –
@NavikGoswami Просто извлекайте элементы один раз, если ItemSource имеет значение null или делает это в конструкторе страницы. Нет необходимости очищать, если элементы одинаковые. –