2017-04-12 12 views
0

私のピボットをScrollViewerでカバーしたいのですが、ピボットがスクロールビューワ自体にスクロールビューアを持っているので効果はありません。ですから、Pivo​​tのタブを変更するために左右にスワイプを無効にする方法を知りたいのです。UWPのPivotの左右のスワイプ機能を無効にします

注:それはピボットのすべての相互作用を無効になりますので、あなたがピボットに左/右スワイプを無効にしたいが、まだときヘッダー異なるピボット項目に移動したい場合は、タブ

+0

なぜピボットコントロール自体を使用していますか? ScrollViewerでOrientation = "Horizo​​ntal"のStackPanelを使用できます。 –

+0

私は、それを使用しているプロジェクトを維持しています。レイアウトを変更すると時間がかかります。 –

+0

このMSDNの回答が役立つかどうかを確認してください。https://social.msdn.microsoft.com/Forums/windowsapps/en-US/59986d8e-e83e-450f-ae96-262236442c4a/uwp-how-to-disable-swipe-leftright -pub-to-more-tablike-experience?forum = wpdevelop –

答えて

1

を変更するには、ヘッダーにタップを含んIsHitTestVisible="True"を使用することはできませんタップすると、あなたはポインタ我々はPivot内部ScrollViewerへのアクセスを得るために必要な最初これを行うにはPointerEnteredまたはPointerMoved

ときピボットにScrollViewerHorizontalScrollModeを無効にする必要があります。これを行うために、私はSOからの回答の1つからコピーしたヘルパーメソッドを使用しました。

Pivotで今
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; 
} 

、アクティブイベントPivot_LoadedとあなたのPivot_Loadedは、以下のようなものが表示されるはずです。

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

これはすべてblog投稿からです。

Good Luck。

+1

@Bui Quang Huy、この返信があなたの問題を解決しましたか?何か更新しましたか? –

+0

@BuiQuangHuy?すべてのアップデート? – AVK

+0

私は遅刻して申し訳ありませんが、私はこの問題を無視しました。ところで、私はスクロールを有効にするためにマウスを回転させ、マウスが動いたときにピボットインタラクションを無効にするトリックを使用して、再度有効にしました。 :) –

関連する問題