ScrollViewer не работает должным образом с комбинацией нескольких GridViews в ListView в приложении UWP - PullRequest
0 голосов
/ 18 мая 2018

Я использую 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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 19 мая 2018

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

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

Вы можете использовать внутреннее событие GridView item PointerEntered и ViewChanged для достижения этого эффекта.Когда внутренний элемент GridView прокручивается вверх или вниз, делает его ScrollMode отключенным, в то же время мы включаем внутренний GridView элемент ScrollMode, когда указатель входит во внутренний элемент GridView.

И я обнаружил похожую проблему в msdn, и у нее есть полный ответ, на который вы могли бы сослаться.

...