ScrollViewer не работает должным образом с комбинацией нескольких GridViews в ListView в приложении UWP
0 tocto [2018-05-18 16:44:00]
Я использую GridViews
представляющие файлы разных папок. Эти GridViews
с одной строкой и горизонтальной ориентацией упорядочены в вертикальном ListView
.
Здесь вы получаете идею из кода:
<ListView ItemSource={Binding CollectionOfFolders}>
<ListView.ItemTemplate>
<GridView>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Loaded="WrapGridLoaded"
MaximumRowsOrColumns="1"
Orientation="Vertical" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
...
</GridView.ItemTemplate>
</GridView>
</ListView.ItemTemplate>
</ListView>
И визуальное впечатление здесь:
Проблема заключается в обработке вертикальной и горизонтальной прокрутки.
При использовании toch input все работает по желанию: при перемещении пальца вверх и вниз вы просматриваете список (папки). Если вы перемещаете палец по горизонтали, прокрутите его через GridView (файлы).
Проблема возникает при использовании колеса мыши или тачпада с жестом с двумя пальцами: когда указатель находится на любом элементе или файле, он не влияет на ListView. Все жесты влияют только на gridview.
Я попытался отключить и включить вертикальные и горизонтальные scrollmodes, свойство IsVertical/HorizontalModeChanningEnabled, а также эффекты полосы прокрутки и видимости прокрутки.
Я задаю эти вопросы, связанные с проблемой, но могу найти решение для этой конкретной проблемы, которую я просто разделил:
- Игнорировать горизонтальную прокрутку мыши с помощью вложенного ScrollViewer
- Функция ScrollViewer IsHorizontalScrollChainingEnabled и IsHorizontalRailEnabled
Было бы здорово, если бы у кого-то были идеи или даже решение.
c# listview gridview uwp uwp-xaml
1 ответ
0 Nico Zhu - MSFT [2018-05-19 11:20:00]
Проблема возникает при использовании колеса мыши или тачпада с жестом с двумя пальцами: когда указатель находится на любом элементе или файле, он не влияет на ListView. Все жесты влияют только на gridview.
Проблема в том, что элемент GridView
захватил бы колесо мыши и дважды прокручивал жест, когда он сфокусировался. Для вашего требования вы можете отключить эту функцию вручную.
Для достижения этого эффекта вы можете использовать внутренний элемент GridView
PointerEntered
и ViewChanged
. Когда внутренний элемент GridView
прокручивается вверх или вниз, он ScrollMode
, тем самым мы делаем внутреннюю ScrollMode
GridView
ScrollMode
включенной, когда указатель входит во внутренний элемент GridView
.
И я нашел подобную проблему в msdn, и у нее есть полный ответ, на который вы можете ссылаться.