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>

И визуальное впечатление здесь:

Screenshot

Проблема заключается в обработке вертикальной и горизонтальной прокрутки.

При использовании toch input все работает по желанию: при перемещении пальца вверх и вниз вы просматриваете список (папки). Если вы перемещаете палец по горизонтали, прокрутите его через GridView (файлы).

Проблема возникает при использовании колеса мыши или тачпада с жестом с двумя пальцами: когда указатель находится на любом элементе или файле, он не влияет на ListView. Все жесты влияют только на gridview.

Я попытался отключить и включить вертикальные и горизонтальные scrollmodes, свойство IsVertical/HorizontalModeChanningEnabled, а также эффекты полосы прокрутки и видимости прокрутки.

Я задаю эти вопросы, связанные с проблемой, но могу найти решение для этой конкретной проблемы, которую я просто разделил:

Было бы здорово, если бы у кого-то были идеи или даже решение.

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, и у нее есть полный ответ, на который вы можете ссылаться.