私のピボットをScrollViewerでカバーしたいのですが、ピボットがスクロールビューワ自体にスクロールビューアを持っているので効果はありません。ですから、Pivotのタブを変更するために左右にスワイプを無効にする方法を知りたいのです。UWPのPivotの左右のスワイプ機能を無効にします
注:それはピボットのすべての相互作用を無効になりますので、あなたがピボットに左/右スワイプを無効にしたいが、まだときヘッダー異なるピボット項目に移動したい場合は、タブ
私のピボットをScrollViewerでカバーしたいのですが、ピボットがスクロールビューワ自体にスクロールビューアを持っているので効果はありません。ですから、Pivotのタブを変更するために左右にスワイプを無効にする方法を知りたいのです。UWPのPivotの左右のスワイプ機能を無効にします
注:それはピボットのすべての相互作用を無効になりますので、あなたがピボットに左/右スワイプを無効にしたいが、まだときヘッダー異なるピボット項目に移動したい場合は、タブ
を変更するには、ヘッダーにタップを含んIsHitTestVisible="True"
を使用することはできませんタップすると、あなたはポインタ我々はPivot
内部ScrollViewer
へのアクセスを得るために必要な最初これを行うにはPointerEntered
またはPointerMoved
ときピボットにScrollViewer
にHorizontalScrollMode
を無効にする必要があります。これを行うために、私は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。
@Bui Quang Huy、この返信があなたの問題を解決しましたか?何か更新しましたか? –
@BuiQuangHuy?すべてのアップデート? – AVK
私は遅刻して申し訳ありませんが、私はこの問題を無視しました。ところで、私はスクロールを有効にするためにマウスを回転させ、マウスが動いたときにピボットインタラクションを無効にするトリックを使用して、再度有効にしました。 :) –
なぜピボットコントロール自体を使用していますか? ScrollViewerでOrientation = "Horizontal"のStackPanelを使用できます。 –
私は、それを使用しているプロジェクトを維持しています。レイアウトを変更すると時間がかかります。 –
この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 –