該問題的一個解決方案是擴展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在不依賴於它的名字用不同的方式。就像在我的回答here中使用該方法一樣。雖然,我猜這也沒關係。
對此使用單獨的事件可能是一個更好的主意。在上面的代碼中,我設置了SelectedIndex
屬性,該屬性引發了SelectionChanged
事件,但它也很有可能做其他事情,所以在某些情況下可能會出現問題。
我沒有意識到這是直截了當的。我已經測試過它,並進行了一些調整,它將起作用。謝謝。 – 2014-12-18 04:03:20
很好的答案!但我認爲在自定義控件的「OnApplyTemplate」中通過名稱獲取模板子(ScrollViewer)是很常見的。 – 2014-12-22 23:08:07
@DerekBeattie:你可以在這裏添加你的「調整」嗎? – 2014-12-27 12:20:31