FlipView SelectionChanged事件仅在触摸操作完成时发生

时间:2014-12-10 22:06:08

标签: xaml windows-phone-8.1 windows-8.1 flipview

来自docs

  

注意当用户使用触摸翻阅FlipView内容时   交互时,只有在触摸时才会发生SelectionChanged事件   操纵完成。这意味着当用户翻阅时   内容很快,个别SelectionChanged事件并不总是如此   为每个项目生成,因为操作仍在进行中。

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

1 个答案:

答案 0 :(得分: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。就像在我的回答here中使用方法一样。虽然,我猜这也很好。

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