9

文档

注意当用户使用触摸交互翻阅 FlipView 内容时,仅当触摸操作完成时才会发生 SelectionChanged 事件。这意味着当用户快速翻阅内容时,并不总是为每个项目生成单独的 SelectionChanged 事件,因为操作仍在发生。

有没有办法将FlipView控件配置SelectionChanged为每次翻转触发?这种行为使实现分页变得有趣,因为如果用户翻得足够快,可以在添加更多项目之前翻到列表的末尾。

4

1 回答 1

10

该问题的一种解决方案是扩展FlipView并监视其ScrollViewer. 这是我建议的快速示例。似乎适用于水平翻转视图(没有处理任何其他情况,也没有测试太多)。

public class FixedFlipView : FlipView {
    public ScrollViewer ScrollViewer {
        get;
        private set;
    }

    protected override void OnApplyTemplate() {
        base.OnApplyTemplate();

        this.ScrollViewer = (ScrollViewer)this.GetTemplateChild("ScrollingHost");
        this.ScrollViewer.ViewChanged += ScrollViewer_ViewChanged;
    }

    void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e) {
        var index = (int)this.ScrollViewer.HorizontalOffset - 2;
        if (this.SelectedIndex != index) {
            this.SelectedIndex = index;
        }
    }
}

需要注意的一些事项:

  1. 您可能希望以不依赖于其名称的不同方式获取 ScrollViewer。就像在这里使用我的答案中的方法一样。虽然,我想这也很好。

  2. 为此使用单独的事件可能是一个更好的主意。在上面的代码中,我设置了SelectedIndex引发SelectionChanged事件的属性,但它也很可能也在做其他事情,所以在某些情况下它可能是一个问题。

于 2014-12-17T09:59:15.767 回答