9

ドキュメントから:

注 ユーザーがタッチ操作を使用して FlipView コンテンツをめくるとき、SelectionChanged イベントは、タッチ操作が完了したときにのみ発生します。これは、ユーザーがコンテンツをすばやくめくると、操作がまだ行われているため、すべての項目に対して個々の SelectionChanged イベントが常に生成されるとは限らないことを意味します。

フリップごとに起動するようにFlipViewコントロールを構成する方法はありますか? SelectionChangedこの動作により、ページングの実装が興味深いものになります。ユーザーがページをめくる速度が十分であれば、さらに項目を追加する前にリストの最後までめくることができるからです。

4

1 に答える 1

10

この問題の 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 を取得したい場合があります。ここで私の答えでメソッドを使用するように。とはいえ、これでもいいと思います。

  2. これには別のイベントを使用することをお勧めします。上記のコードSelectedIndexでは、イベントを発生させるプロパティを設定していますSelectionChangedが、他のことも実行している可能性が非常に高いため、場合によっては問題になる可能性があります。

于 2014-12-17T09:59:15.767 に答える