xaml - El evento FlipView SelectionChanged ocurre solo cuando las manipulaciones táctiles están completas
windows-phone-8.1 windows-8.1 (1)
Una solución al problema es extender FlipView
y monitorear su ScrollViewer
. Aquí hay una muestra rápida de lo que estoy sugiriendo. Parece que funciona en vista invertida horizontal (no ha manejado ningún otro caso y no ha probado demasiado).
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;
}
}
}
Algunas cosas a tener en cuenta:
Es posible que desee obtener el ScrollViewer de una manera diferente que no dependa de su nombre. Me gusta usar el método en mi respuesta aquí . Aunque, supongo que esto también está bien.
Puede ser una mejor idea usar un evento separado para esto. En el código anterior, configuré la propiedad
SelectedIndex
, lo que aumenta el eventoSelectionChanged
, pero también es probable que haga otras cosas, por lo que puede ser un problema en algunos casos.
De los documentos :
Nota Cuando un usuario hojea el contenido de FlipView utilizando la interacción táctil, un evento SelectionChanged ocurre solo cuando se completan las manipulaciones táctiles. Esto significa que cuando un usuario hojea contenido rápidamente, los eventos SelectionChanged individuales no siempre se generan para cada elemento porque la manipulación todavía se está produciendo.
¿Hay alguna manera de configurar el control FlipView
para disparar SelectionChanged
para cada flip? Este comportamiento hace que la implementación de la paginación sea interesante ya que el usuario, si se mueve lo suficientemente rápido, puede ir al final de la lista antes de agregar más elementos.