2015-03-20 4 views
1

Я хочу сохранить позицию ListView, а затем загрузить ее так, чтобы ListView отображался на точной позиции, которая была до этого. ListView.ScrollIntoView() не является достаточно точным.Точная позиция прокрутки ListView

ответ

2

Используйте свойство VerticalOffset, чтобы получить смещение, затем ScrollToVerticalOffset, чтобы его сбросить. Так как они находятся на ScrollViewer, вам нужно извлечь его из визуального дерева. Обратите внимание, что в этом коде предполагается, что вы не перемоделировали ListView. Этот образец предполагает, что объект назван myListView:

ScrollViewer scrollViewer; 
double offset; 

public MainPage() 
{ 
    this.InitializeComponent(); 

    // Have to wait until the templates have been created 
    SizeChanged += MainPage_SizeChanged; 
} 

void MainPage_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    // Assumes default template 
    scrollViewer = VisualTreeHelper.GetChild(
    VisualTreeHelper.GetChild(myListView, 0), 0) as ScrollViewer; 

    // Not needed any more 
    SizeChanged -= MainPage_SizeChanged; 
} 

private void GetOffsetClicked(object sender, RoutedEventArgs e) 
{ 
    offset = scrollViewer.VerticalOffset; 
} 

private void SetOffsetClicked(object sender, RoutedEventArgs e) 
{ 
    scrollViewer.ScrollToVerticalOffset(offset); 
} 
+0

Спасибо. Это работает очень хорошо. Проблема возникла, когда у меня есть 'Pivot' с' ListViews' в двух 'ListViewItems'. У меня есть исключение, что _ «Параметр некорректен» _, когда я пытаюсь получить ScrollViewer из визуального дерева. – Vil

+0

Хорошо. Мне удалось исправить это. – Vil

Смежные вопросы