UWP 在网格视图中禁用鼠标滚动
UWP Disable mouse scroll in grid view
我有一个设置为垂直方向的集线器,其中包含多个 HubSections。在这些 HubSections 中的每一个中都有一个水平滚动的网格视图。有关类似布局的示例,请查看 Windows 商店的主屏幕。
我想阻止鼠标滚动水平移动列表,而是继续垂直滚动。我有图片,类似于 Windows Store,允许用户手动滑动网格视图。我还想启用滑动来移动列表,类似于商店所做的。
我已经尝试从 GridView 派生控件并覆盖 PointerWheelChanged 事件,但它从未进入该事件,因为我认为内部滚动查看器正在接管。我尝试从ScrollViewer派生,但是它是密封的,无法完成。
我在 ItemsPanelTemplate 中使用了 ItemsWrapGrid,所以也许其中有些东西我可以覆盖...
以这个post为例,我能够解决这个问题:
使用 VisualTreeExtensions,我必须找到并将此方法应用于包含 ScrollContentPresenter 的网格。我在网格视图的 OnLoaded 事件中执行了此操作。
private void gridView_Loaded(object sender, RoutedEventArgs e)
{
var gridView = VisualTreeHelper.GetChild(this, 0) as FrameworkElement;
var grids = gridView.GetDescendantsOfType<Grid>().ToList();
var oneIWant = grids.Where(x => x.Children.Any(y => y.GetType() == typeof(ScrollContentPresenter))).First();
oneIWant.PointerWheelChanged += ScrollViewer_PointerWheelChanged;
}
不优雅,但现在就可以了。我对可能存在的任何其他选项持开放态度。
我有一个设置为垂直方向的集线器,其中包含多个 HubSections。在这些 HubSections 中的每一个中都有一个水平滚动的网格视图。有关类似布局的示例,请查看 Windows 商店的主屏幕。
我想阻止鼠标滚动水平移动列表,而是继续垂直滚动。我有图片,类似于 Windows Store,允许用户手动滑动网格视图。我还想启用滑动来移动列表,类似于商店所做的。
我已经尝试从 GridView 派生控件并覆盖 PointerWheelChanged 事件,但它从未进入该事件,因为我认为内部滚动查看器正在接管。我尝试从ScrollViewer派生,但是它是密封的,无法完成。
我在 ItemsPanelTemplate 中使用了 ItemsWrapGrid,所以也许其中有些东西我可以覆盖...
以这个post为例,我能够解决这个问题:
使用 VisualTreeExtensions,我必须找到并将此方法应用于包含 ScrollContentPresenter 的网格。我在网格视图的 OnLoaded 事件中执行了此操作。
private void gridView_Loaded(object sender, RoutedEventArgs e)
{
var gridView = VisualTreeHelper.GetChild(this, 0) as FrameworkElement;
var grids = gridView.GetDescendantsOfType<Grid>().ToList();
var oneIWant = grids.Where(x => x.Children.Any(y => y.GetType() == typeof(ScrollContentPresenter))).First();
oneIWant.PointerWheelChanged += ScrollViewer_PointerWheelChanged;
}
不优雅,但现在就可以了。我对可能存在的任何其他选项持开放态度。