从文档:
注意当用户使用触摸交互翻阅 FlipView 内容时,仅当触摸操作完成时才会发生 SelectionChanged 事件。这意味着当用户快速翻阅内容时,并不总是为每个项目生成单独的 SelectionChanged 事件,因为操作仍在发生。
有没有办法将FlipView
控件配置SelectionChanged
为每次翻转触发?这种行为使实现分页变得有趣,因为如果用户翻得足够快,可以在添加更多项目之前翻到列表的末尾。
从文档:
注意当用户使用触摸交互翻阅 FlipView 内容时,仅当触摸操作完成时才会发生 SelectionChanged 事件。这意味着当用户快速翻阅内容时,并不总是为每个项目生成单独的 SelectionChanged 事件,因为操作仍在发生。
有没有办法将FlipView
控件配置SelectionChanged
为每次翻转触发?这种行为使实现分页变得有趣,因为如果用户翻得足够快,可以在添加更多项目之前翻到列表的末尾。
该问题的一种解决方案是扩展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。就像在这里使用我的答案中的方法一样。虽然,我想这也很好。
为此使用单独的事件可能是一个更好的主意。在上面的代码中,我设置了SelectedIndex
引发SelectionChanged
事件的属性,但它也很可能也在做其他事情,所以在某些情况下它可能是一个问题。