この問題の 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;
}
}
}
注意すべき点:
名前に依存しない別の方法で ScrollViewer を取得したい場合があります。ここで私の答えでメソッドを使用するように。とはいえ、これでもいいと思います。
これには別のイベントを使用することをお勧めします。上記のコードSelectedIndex
では、イベントを発生させるプロパティを設定していますSelectionChanged
が、他のことも実行している可能性が非常に高いため、場合によっては問題になる可能性があります。