UWP在网格视图中禁用鼠标滚动

时间:2016-05-09 18:08:49

标签: win-universal-app uwp-xaml

我有一个设置为包含多个HubSections的垂直方向的集线器。在每个HubSections中都是一个水平滚动的网格视图。有关类似布局的示例,请查看Windows应用商店的主屏幕。

我想阻止鼠标滚动水平移动列表,而是继续垂直滚动。我有适当的图像,类似于Windows应用商店,允许用户手动滑动网格视图。我还想启用滑动来移动列表,类似于商店。

我尝试从GridView派生控件并覆盖PointerWheelChanged事件,但它从未进入该事件,因为我认为内部滚动查看器正在接管。我试图从ScrollViewer派生,但它是密封的,无法完成。

我在ItemsPanelTemplate中使用了ItemsWrapGrid,所以也许有些内容我可以覆盖......

1 个答案:

答案 0 :(得分:0)

以这篇文章为例,我能够解决这个问题:

Pivot inside a ScrollViewer, scrollviewer wont scroll

使用VisualTreeExtensions,我必须找到并将此方法应用于包含ScrollContentPresenter的Grid。我在网格视图的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;
    }

不优雅,但它现在应该到期。我对可能存在的任何其他选项持开放态度。