UWP Отключить прокрутку мыши в представлении сетки

У меня есть концентратор с вертикальной ориентацией, содержащий несколько HubSections. В каждом из этих HubSections есть представление сетки с горизонтальной прокруткой. В качестве примера подобного макета взгляните на главный экран магазина Windows.

Я хочу, чтобы прокрутка мыши не перемещала список по горизонтали, а вместо этого продолжала прокручивать по вертикали. У меня есть изображения, похожие на Магазин Windows, чтобы пользователь мог вручную перемещать представление сетки. Я также хочу включить смахивание для перемещения списка, аналогично тому, что делает магазин.

Я попытался получить элемент управления из GridView и переопределить событие PointerWheelChanged, но оно никогда не входит в это событие, так как я думаю, что внутреннее средство просмотра прокрутки берет верх. Я попытался вывести ScrollViewer, но он запечатан и не может быть выполнен.

Я использую ItemsWrapGrid в ItemsPanelTemplate, поэтому, возможно, внутри есть что-то, что я мог бы переопределить...


person Justin Patten    schedule 09.05.2016    source источник


Ответы (1)


Используя этот пост в качестве примера, я смог решить это:

Поворот внутри ScrollViewer, scrollviewer не будет прокручиваться

Используя 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;
    }

Не элегантно, но пока сойдет. Я открыт для любых других вариантов, которые могут быть там.

person Justin Patten    schedule 09.05.2016
comment
Разве это не помогает ScrollViewer.HorizontalScrollMode=Disabled? - person Archana; 10.05.2016
comment
Мне нужно было разрешить горизонтальное смахивание для работы на сенсорных экранах. Установка этого параметра в отключенное предотвратила это. - person Justin Patten; 10.05.2016