2017-04-12 2 views
0

Ich möchte meine Pivot mit ScrollViewer abdecken, aber es hat keine Auswirkungen, weil Pivot es scrollviewer selbst hat. Also ich möchte die Art und Weise zu deaktivieren deaktivieren wischen nach links/rechts, um Registerkarte von Pivot zu ändern.Deaktivieren Swipe links/rechts Feature von Pivot in UWP

Hinweis: nicht IsHitTestVisible="True" verwenden, weil es alle Interaktionen von Pivot sind auf Kopf tippen deaktivieren Registerkarte

+0

Warum verwenden Sie das Pivot-Steuerelement selbst? Sie können StackPanel mit Orientation = "Horizontal" in einem ScrollViewer verwenden. –

+0

Ich behalte das Projekt, das es benutzt, Mann. Wenn ich das Layout ändere, kostet es Zeit. –

+0

Überprüfen Sie diese MSDN-Antwort, wenn es hilft: https://social.msdn.microsoft.com/Forums/windowsapps/en-US/59986d8e-e83e-450f-ae96-262236442c4a/uwp-how-to-disable-swipe-leftright -on-pivot-to-get-a-more-tablike-experience? Forum = wpdevelop –

Antwort

1

zu ändern, wenn Sie Links/Rechts Swipe auf Pivot deaktivieren möchten, wollen aber trotzdem verschiedene Pivot Artikel navigieren, wenn Kopf angezapft wird, müssen Sie HorizontalScrollMode auf ScrollViewer auf dem Pivot deaktivieren, wenn Pointer PointerEntered oder PointerMoved

ist diese Wir müssen zuerst tun Zugang zu ScrollViewer Innen Pivot gewinnen. Um dies zu tun, habe ich eine Helper-Methode verwendet, die ich aus einer der Antworten von SO kopiert habe.

public static T FindChildByName<T>(DependencyObject parent, string childName) where T : DependencyObject 
{ 
    if (parent == null) return null; 
    T foundChild = null; 
    int childrenCount = VisualTreeHelper.GetChildrenCount(parent); 
    for (int i = 0; i < childrenCount; i++) 
    { 
     var child = VisualTreeHelper.GetChild(parent, i); 
     T childType = child as T; 
     if (childType == null) 
     { 
      foundChild = FindChildByName<T>(child, childName); 
      if (foundChild != null) break; 
     } 
     else if (!string.IsNullOrEmpty(childName)) 
     { 
      var frameworkElement = child as FrameworkElement; 
      if (frameworkElement != null && frameworkElement.Name == childName) 
      { 
       foundChild = (T)child; 
       break; 
      } 
     } 
     else 
     { 
      foundChild = (T)child; 
      break; 
     } 
    } 
    return foundChild; 
} 

Jetzt in Pivot, Activate Ereignis Pivot_Loaded und Ihre Pivot_Loaded sollte wie unten etwas zeigen.

private void Pivot_Loaded(object sender, RoutedEventArgs e) 
{ 
    Pivot pivot = sender as Pivot; 
    int count = VisualTreeHelper.GetChildrenCount(pivot); 
    ScrollViewer scrollViewer = FindChildByName<ScrollViewer>(pivot, "ScrollViewer"); 
    scrollViewer.PointerEntered += (s, a) => { ((ScrollViewer)s).HorizontalScrollMode = ScrollMode.Disabled; }; 
    scrollViewer.PointerMoved += (s, a) => { ((ScrollViewer)s).HorizontalScrollMode = ScrollMode.Disabled; }; 
    scrollViewer.PointerExited += (s, a) => { ((ScrollViewer)s).HorizontalScrollMode = ScrollMode.Enabled; }; 
    scrollViewer.PointerReleased += (s, a) => { ((ScrollViewer)s).HorizontalScrollMode = ScrollMode.Enabled; }; 
    scrollViewer.PointerCaptureLost += (s, a) => { ((ScrollViewer)s).HorizontalScrollMode = ScrollMode.Enabled; }; 
} 

Die ganze Idee, dies zu tun ist aus dieser blog Post.

Viel Glück.

+1

@Bui Quang Huy, hat diese Antwort Ihr Problem gelöst? Hattest du irgendwelche Updates? –

+0

@BuiQuangHuy? Irgendein Update? – AVK

+0

Es tut mir leid, dass ich verspätet antwortete, aber ich ignorierte dieses Problem. Übrigens, ich habe einen Trick benutzt, nämlich "Pivot-Interaktion deaktivieren", wenn die Maus zum Scrollen bewegt wird, und wenn die Maus sich bewegt, aktiviere ich sie erneut. :) –

Verwandte Themen