FlipView
ユーザーがタッチでスクロールできる無限のカレンダー スタイル (日付ベース) を実装しようとしています。をカスタムでバインドしていFlipView
ます。すべてがうまく表示され、目的の動作を提供するために を操作しています。選択したインデックスが変更されたら、新しい要素を上に追加し、下から削除します。ItemTemplate
ObservableCollection
ObservableCollection
private void OnIndexChanged(object sender, SelectionChangedEventArgs e)
{
//Works great on slow swiping with pauses, no offset artifacts
DataGroup.OnIndexChanged(GroupFlip.SelectedIndex);
}
問題は、ユーザーがスクロールを停止したときにFlipView
のみ変更されたイベントをトリガーすることです。SelectedIndex
小さなスワイプの場合はこれで問題ありませんが、ユーザーは簡単にコレクションの最後に到達し、コレクションが更新されるまで行き止まりになる可能性があります。
hereで提案されているように、 FlipView
innerScrollViewer
のを正常にサブスクライブし、を表示して使用して、新しいインデックス オフセットを計算し、コレクションを操作することができます。[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
二重トリガーを避けるためにいくつかのイベントを無視し、インデックスの変更と現在のオフセットに基づいて計算された値に新しいものを強制するなど、多くの組み合わせを試しました。透明な結果が得られるものはありません。これは、シームレスな無限スクロールです。
アーティファクトを回避する方法、このイベントを処理する方法、または目的の結果を達成するために実装する他の方法についてのアイデアはありますか?