滚动查看器垂直滚动位置

时间:2015-05-08 13:54:57

标签: c# windows-store-apps scrollviewer flipview scroll-position

我在设置滚动查看器垂直滚动位置(C#,Windows应用商店应用)时遇到问题。

我有一个FlipView,其中包含2到5个项目。 Item是我自己的用户控件 - Scroll Viewer中的Grid。 当当前选择的FlipView项目滚动位置已更改时,我需要将滚动位置更改为所有FlipView项目。

在我的用户控件中,我使用事件:

private void MyScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
    _myPage.ChangeFlipViewItemsScrollPosition(MyScrollViewer.VerticalOffset);
}

在我的页面中,我使用方法:

public void ChangeFlipViewItemsScrollPosition(double verticalOffset)
{
    for (int i = 0; i < MyFlipView.Items.Count; i++)
    {
        MyUserControl item = MyFlipView.Items[i] as MyUserControl;
        if (item != null && i != MyFlipView.SelectedIndex)
        {
            item.MyScrollViewer.ChangeView(null, verticalOffset, null);
        }
    }
}

问题在于:

例如,我在FlipView中有5个项目。

当FlipView选择索引时:

0然后它将滚动位置更改为索引为1和2的项目;

1然后它将滚动位置更改为索引为0和2的项目;

2然后它将滚动位置更改为索引为0,1和3的项目;

3然后它将滚动位置更改为索引为2和4的项目;

4然后它将滚动位置更改为具有索引的项目:3;

我不知道,为什么会这样。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的FlipView看起来有一个正在使用虚拟的项容器来提高性能。这意味着当前可见的项目的控件可能会被丢弃或重复使用。

我没有找到任何Windows应用商店应用专用文档,但行为可能与WPF非常相似,解释here。请参阅更多代码here

您可以通过在VirtualizingStackPanel.IsVirtualizing上将false设置为FlipView,或者使用普通StackPanel(或任何其他非虚拟化容器)替换容器来将其关闭)。