【问题标题】:Scroll Viewer vertical scroll positionScroll Viewer 垂直滚动位置
【发布时间】:2015-05-11 15:39:05
【问题描述】:

我在设置 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 的项目;

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

【问题讨论】:

  • FlipView 中的 ItemsPanel 是什么?这可能与虚拟化有关吗?在if 内的第一行放一个断点,看看其他项是什么类型。
  • @Márton Molnár Tnx 你的评论...我刚刚意识到我需要从 Stack 面板中删除虚拟化,然后一切正常。

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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,我只是用普通的 StackPanel 替换它,它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2022-11-07
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多