ListView的精确滚动位置

ListView的精确滚动位置,listview,windows-runtime,windows-phone-8.1,Listview,Windows Runtime,Windows Phone 8.1,我想保存列表视图的位置,然后加载它,以便列表视图将显示在之前的确切位置ListView.ScrollIntoView()不够精确。使用该属性获取偏移量,然后重置它。由于它们位于ScrollViewer的上,因此需要从可视树中提取。请注意,此代码假定您没有重新设置列表视图的模板。此示例假定对象名为myListView: ScrollViewer scrollViewer; double offset; public MainPage() { this.InitializeComponent(

我想保存
列表视图
的位置,然后加载它,以便
列表视图
将显示在之前的确切位置
ListView.ScrollIntoView()不够精确。

使用该属性获取偏移量,然后重置它。由于它们位于ScrollViewer的
上,因此需要从可视树中提取。请注意,此代码假定您没有重新设置
列表视图的模板。此示例假定对象名为
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);
}

非常感谢。它工作得很好。当我在两个
ListViews项目中使用
ListViews
透视时出现问题。当我试图从可视化树中获取ScrollViewer时,出现了一个异常“参数不正确”。