2014-12-10 24 views
9

Vom docs:FlipView Selection Ereignis tritt nur bei Berührung Manipulationen abgeschlossen sind

Hinweis Wenn ein Benutzer durch die Inhalte FlipView Flips Touch Interaktion mit einem Selection Ereignis tritt nur bei Berührung Manipulationen abgeschlossen sind. Das bedeutet, wenn ein Benutzer schnell Inhalt durchblättert, werden einzelne SelectionChanged-Ereignisse für jedes Element nicht immer generiert, da die Manipulation noch stattfindet.

Gibt es eine Möglichkeit, die FlipView Steuerung zu konfigurieren SelectionChanged für jedes Flip Feuer? Dieses Verhalten macht das Implementieren von Paging interessant, da der Benutzer, wenn er schnell genug blättert, zum Ende der Liste wechseln kann, bevor weitere Elemente hinzugefügt werden können.

Antwort

10

Eine Lösung für das Problem ist die FlipView zu erweitern und zu überwachen ScrollViewer. Hier ist eine kurze Probe von dem, was ich vorschlage. Scheint, auf horizontalem Flip View zu arbeiten (habe keine anderen Fälle behandelt und nicht zu viel getestet).

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; 
     } 
    } 
} 

Einige Dinge zu beachten:

  1. Sie können die Scroll in einer anderen Art und Weise zu bekommen, die nicht auf seinen Namen abhängt. Wie die Verwendung der Methode in meiner Antwort here. Obwohl ich denke, das ist auch in Ordnung.

  2. Es könnte eine bessere Idee sein, ein separates Ereignis dafür zu verwenden. In dem obigen Code Ich habe die SelectedIndex Eigenschaft, die das SelectionChanged Ereignis auslöst, aber es ist auch sehr wahrscheinlich auch tun andere Sachen sein, so kann es ein Problem in einigen Fällen sein.

+0

Ich wusste nicht, dass es so einfach war. Ich habe es getestet und mit einigen Verbesserungen wird es funktionieren. Vielen Dank. –

+0

Gute Antwort! Aber ich denke, es ist üblich, das Template-Kind (den 'ScrollViewer') nach Name in einem' OnApplyTemplate' eines benutzerdefinierten Controls zu bekommen. –

+0

@DerekBeattie: Könnten Sie bitte Ihre "Tweaks" hier hinzufügen? –