来自docs:
注意当用户使用触摸翻阅FlipView内容时 交互时,只有在触摸时才会发生SelectionChanged事件 操纵完成。这意味着当用户翻阅时 内容很快,个别SelectionChanged事件并不总是如此 为每个项目生成,因为操作仍在进行中。
有没有办法配置FlipView
控件以便为每次翻转触发SelectionChanged
?这种行为使得实现分页很有趣,因为用户如果翻转得足够快,可以在添加更多项目之前翻到列表的末尾。
答案 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;
}
}
}
有些注意事项:
您可能希望以不同于其名称的不同方式获取ScrollViewer。就像在我的回答here中使用方法一样。虽然,我猜这也很好。
为此使用单独的事件可能更好。在上面的代码中,我设置了SelectedIndex
属性,它引发了SelectionChanged
事件,但它也很可能也在做其他事情,因此在某些情况下可能会出现问题。