2014-02-06 2 views
5

Ich möchte meine Anwendung eine Pivot Kontrolle mit einem WebBrowser Steuerelement in jedem PivotItem haben. Das Problem ist, dass das Wischen zum nächsten PivotItem nicht funktioniert, da es stattdessen zu einem horizontalen Scrollen der Webseite führt. Die Webseiten sind jedoch reaktionsbereit und müssen nicht horizontal gescrollt werden, stattdessen möchte ich, dass horizontales Wischen zu einem Schwenkschalter führt. Kann dies erreicht werden? Wenn ich kein Pivot Steuerelement verwenden kann, was ist die empfohlene Methode zum Implementieren von Seitenwechsel mit WebControl s auf den Seiten? Ein Top-Menü a la iOS/Android?Swipe Arbeit für ein Pivot-Steuerelement mit integriertem WebBrowser unter Windows Phone 8.0

Antwort

4

Ja, es ist möglich, benötigt jedoch eine kleine Umgehungsmöglichkeit, da Webbrowser das Ereignis zuerst behandelt und Ihr Pivot wahrscheinlich nichts davon weiß. Sie können für diesen Zweck Touch und sein Ereignis FrameReported verwenden. Einfacher Code kann wie folgt aussehen:

public MainPage() 
{ 
    InitializeComponent(); 
    Touch.FrameReported += Touch_FrameReported; 
} 

TouchPoint first; 

private void Touch_FrameReported(object sender, TouchFrameEventArgs e) 
{ 
    TouchPoint mainTouch = e.GetPrimaryTouchPoint(myWebBrowser); 
    if (mainTouch.Action == TouchAction.Down) 
     first = mainTouch; 
    else if (mainTouch.Action == TouchAction.Up) 
    { 
     if (mainTouch.Position.X - first.Position.X < 0) 
      MessageBox.Show("Next item."); 
      //myPivot.SelectedIndex++; 
     if (mainTouch.Position.X - first.Position.X > 0) 
      MessageBox.Show("Previous item."); 
      //myPivot.SelectedIndex--; 
    } 
} 

Wie man sehen kann - ich bin die Erinnerung, wo der Benutzer seine Bewegungen beginnen, dann, wenn er seine Berührung Aussendungen - ich myPivot.SelectetIndex ändern. Hoffe das hilft ein wenig. Sie können auch versuchen mit TouchPanel, aber ich denke, dass wird einfacher sein (wenn es ausreicht).


Wenn Sie einige Gesten deaktivieren möchten, kann es zum Beispiel wie im folgenden Code aussehen. Ich habe nur HorizontalDrag aktiviert - es wird also nicht zum Zoomen ausgelöst. Die Toleranz sollte natürlich nicht 0 sein, Sie müssen die am besten geeignete für Ihre App definieren.

// in MainPage() constructor 
TouchPanel.EnabledGestures = GestureType.HorizontalDrag; 

private void Touch_FrameReported(object sender, TouchFrameEventArgs e) 
{ 
    TouchPoint mainTouch = e.GetPrimaryTouchPoint(myMap); 
    if (mainTouch.Action == TouchAction.Down) 
     first = mainTouch; 
    else if (mainTouch.Action == TouchAction.Up && TouchPanel.IsGestureAvailable) 
    { 
     if (mainTouch.Position.X - first.Position.X < 0) 
     MessageBox.Show("Next item."); 
     //myPivot.SelectedIndex++; 
     if (mainTouch.Position.X - first.Position.X > 0) 
     MessageBox.Show("Previous item."); 
     //myPivot.SelectedIndex--; 
    } 
} 
+0

Dank löst. Während dies prinzipiell funktioniert, wird für die horizontalen Swipe-Bedingungen eine andere Toleranz als Null benötigt, da das vertikale Scrollen wahrscheinlich eine Pivot-Änderung auslöst (es sei denn, Sie scrollen _exactly_ vertikal). Die Frage ist also, welche Toleranz in diesem Zustand zu verwenden ist. Zoomen und Kneifen wird auch einen Drehwechsel auslösen, den ich mir vorstelle. – Christian

+0

@Christian Ich habe einen kleinen Code bearbeitet, damit er nicht für Zoom ausgelöst wird. Sie werden wahrscheinlich mehr mit anderen Gesten herausfinden. – Romasz

Verwandte Themen