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

Xaml FlipView SelectionChanged事件仅在触摸操作完成时发生,xaml,windows-phone-8.1,windows-8.1,flipview,Xaml,Windows Phone 8.1,Windows 8.1,Flipview,从: 请注意,当用户使用触摸浏览FlipView内容时 交互时,仅当触摸时才会发生SelectionChanged事件 操作已完成。这意味着当用户浏览 内容快速,个人选择更改的事件并不总是 为每个项目生成,因为操作仍在发生 是否有方法将FlipView控件配置为为为每个翻转触发SelectionChanged?此行为使实现分页变得有趣,因为用户如果翻转足够快,可以在添加更多项目之前翻转到列表的末尾。解决此问题的一个方法是扩展FlipView并监视其ScrollViewer。下面是我建议的一个快速

从:

请注意,当用户使用触摸浏览FlipView内容时 交互时,仅当触摸时才会发生SelectionChanged事件 操作已完成。这意味着当用户浏览 内容快速,个人选择更改的事件并不总是 为每个项目生成,因为操作仍在发生


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

解决此问题的一个方法是扩展
FlipView
并监视其
ScrollViewer
。下面是我建议的一个快速示例。似乎在水平翻转视图上工作(没有处理任何其他情况,也没有进行过太多测试)

需要注意的一些事项:

  • 您可能希望以不同的方式获取ScrollViewer,而不依赖于其名称。我喜欢用我的答案中的方法。不过,我想这也不错

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


  • 我不知道这是这么简单。我已经测试过了,只要稍作调整,它就可以工作了。谢谢。回答得好!但是我认为在自定义控件的
    OnApplyTemplate
    @DerekBeattie中按名称获取模板子项(ScrollViewer)是很常见的。你能在这里添加你的“调整”吗?@kubakista我仍在努力使它以某种方式工作,这个解决方案允许每次翻转都触发一个事件,我现在的问题是:@DerekBeattie:btw:您知道通过“上一个/下一个”按钮进行导航不起作用吗?
    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;
            }
        }
    }