docs:



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

最佳答案

解决该问题的一种方法是扩展FlipView并监视其ScrollViewer。这是我所建议的快速样本。似乎可以在水平翻转 View 中使用(没有处理任何其他情况,也没有进行过多测试)。

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;
        }
    }
}

注意事项:
  • 您可能希望以不依赖于其名称的另一种方式来获取ScrollViewer。就像在我的答案here中使用该方法一样。虽然,我想这也很好。
  • 为此,使用单独的事件可能是一个更好的主意。在上面的代码中,我设置了SelectedIndex属性,该属性引发SelectionChanged事件,但它也很有可能还会做其他事情,因此在某些情况下可能是个问题。
  • 关于xaml - FlipView SelectionChanged事件仅在触摸操作完成时发生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27411729/

    10-13 06:06