计算水平偏移以将ListView滚动到SelectedItem的中心

时间:2015-04-24 07:59:08

标签: c# listview windows-store-apps windows-8.1 scrollviewer

我正在构建一个照片应用程序,使用FlipViewlistView作为分页。 当我点击ListView中的缩略图时,它会在FlipView中显示相同的图片。当我滑入FlipView时,所选的任何照片都会在ListView中选择相同的照片。这可以通过添加到它们来完成:

ListView

SelectedIndex="{Binding Path=SelectedIndex, ElementName=flipView1, Mode=TwoWay}

FlipView

SelectedIndex="{Binding Path=SelectedIndex, ElementName=listView1, Mode=TwoWay}

我添加的ListView SelectionChanged事件:

 if (e.AddedItems.Count > 0)
        listView1.ScrollIntoView(e.AddedItems.First(), ScrollIntoViewAlignment.Leading);

我唯一的问题是当我滑动FlipView时,在ListView中选择了所需的图片,但ScrollViewer未滚动到该WinRTXamlToolkit。我尝试使用ScrollViewer更改private void pageRoot_Loaded() { // count number of all items int itemCount = this.listView1.Items.Count; if (itemCount == 0) return; if (listView1.SelectedIndex >= itemCount) listView1.SelectedIndex = itemCount - 1; // calculate x-posision of selected item double listWidth = this.listView1.ActualWidth; double xPos = (listWidth / itemCount) * listView1.SelectedIndex; // scroll var scrollViewer2 = listView1.GetFirstDescendantOfType<ScrollViewer>(); if (scrollViewer2 != null) scrollViewer2.ChangeView(xPos, 0.0, 1); } 的位置:

listWidth

第一次1600.00.0,然后它始终变为xPos = 0.0,这会给{{1}}!

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

https://msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.listview.aspx

您应该使用两种“ScrollIntoView”方法之一。

答案 1 :(得分:0)

ListView.ScrollIntoView()应该有效。调用方法滚动ScrollViewer时可能会出现问题,因为它已经滚动了ScrollViewer.InvalidateScrollInfo()。我会尝试摆弄ViewChanging/ViewChanged,这可能会加快速度。否则 - 您可以尝试处理ScrollViewerViewChangedEventArgs.IsIndeterminate个事件以查看它是否正在滚动并尝试将该信息与glOrtho一起使用来链接呼叫。

同时检查我对这个问题的回答: Centering selected item in a scroll viewer