【问题标题】:FlipView SelectionChanged event occurs only when touch manipulations are completeFlipView SelectionChanged 事件仅在触摸操作完成时发生
【发布时间】:2014-12-17 17:59:15
【问题描述】:

来自docs

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

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

【问题讨论】:

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


    【解决方案1】:

    该问题的一个解决方案是扩展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 事件,但它也很可能还会做其他事情,所以在某些情况下可能会出现问题。

      李>

    【讨论】:

    • 我没有意识到它这么简单。我已经对其进行了测试,并进行了一些调整,它会起作用。谢谢。
    • 好答案!但我认为在自定义控件的OnApplyTemplate 中按名称获取模板子项(ScrollViewer)是很常见的。
    • @DerekBeattie:你能在这里添加你的“调整”吗?
    • @kubakista 我仍在尝试让它以某种方式工作,这个解决方案确实允许每次翻转触发一个事件,我现在的问题是:stackoverflow.com/questions/27591603/…
    • @DerekBeattie:顺便说一句:你知道通过上一个/下一个按钮导航不起作用吗?
    猜你喜欢
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    相关资源
    最近更新 更多