1

我在设置 Scroll Viewer 垂直滚动位置(C#,Windows Store App)时遇到问题。

我有一个 FlipView,其中包含 2 到 5 个项目。项目是我自己的用户控件 - 滚动查看器中的网格。当当前选定的 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;

我不知道,为什么会这样。有人能帮忙吗?

4

1 回答 1

0

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

我没有找到任何 Windows Store 应用程序特定的文档,但其行为可能与 WPF 的行为非常相似,在此处进行了解释。在这里查看更多代码。

您可以通过设置VirtualizingStackPanel.IsVirtualizingfalseon yourFlipView或将容器替换为普通容器StackPanel(或任何其他非虚拟化容器)来关闭它。

于 2015-05-11T07:39:05.987 回答