0

FlipViewユーザーがタッチでスクロールできる無限のカレンダー スタイル (日付ベース) を実装しようとしています。をカスタムでバインドしていFlipViewます。すべてがうまく表示され、目的の動作を提供するために を操作しています。選択したインデックスが変更されたら、新しい要素を上に追加し、下から削除します。ItemTemplateObservableCollectionObservableCollection

private void OnIndexChanged(object sender, SelectionChangedEventArgs e)
        {
            //Works great on slow swiping with pauses, no offset artifacts
            DataGroup.OnIndexChanged(GroupFlip.SelectedIndex);
        }

問題は、ユーザーがスクロールを停止したときにFlipViewのみ変更されたイベントをトリガーすることです。SelectedIndex小さなスワイプの場合はこれで問題ありませんが、ユーザーは簡単にコレクションの最後に到達し、コレクションが更新されるまで行き止まりになる可能性があります。

hereで提案されているように、 FlipViewinnerScrollViewerのを正常にサブスクライブし、を表示して使用して、新しいインデックス オフセットを計算し、コレクションを操作することができます。[Viewchanged][1]HorizontalOffset

問題は、このイベントでコレクションが操作されるFlipViewと、ユーザーとコレクションの操作の種類に応じて、さまざまな方法でジャンプすることです。

InnerFlipper.ViewChanged += OnSoftScroll;//InnerFlipper is caught from the `VisualHelperTree`        
private void OnSoftScroll(object sender, ScrollViewerViewChangedEventArgs e)
    {
        (...)
        double UpperMargin = ScrollableSize - Offset;//Value is reliable
        if (UpperMargin < ViewObservableSize)
        {
            DataGroup.OnIndexDelta(1);
        }
        (...)
    }

HorizontalOffset二重トリガーを避けるためにいくつかのイベントを無視し、インデックスの変更と現在のオフセットに基づいて計算された値に新しいものを強制するなど、多くの組み合わせを試しました。透明な結果が得られるものはありません。これは、シームレスな無限スクロールです。

アーティファクトを回避する方法、このイベントを処理する方法、または目的の結果を達成するために実装する他の方法についてのアイデアはありますか?

4

1 に答える 1