Функция ScrollViewer IsHorizontalScrollChainingEnabled и IsHorizontalRailEnabled

3 Thomas Schneiter [2016-10-31 11:21:00]

Может кто-нибудь объяснить, что эти два свойства делают точно?

IsHorizontalScrollChainingEnabled
IsHorizontalRailEnabled

  • Я пробовал первый с вложенными ScrollViewers, но не могу найти разницы в функциональности. Включено или отключено по умолчанию? Что он делает точно, нет информации о функциональности в документах или Google, насколько я могу найти.

    Документы: Истина для включения горизонтальной привязки прокрутки от дочернего к родительскому; в противном случае - false.

  • Два свойства HorizontalScrollBarVisibility (Visible/Collapsed) и HorizontalScrollMode (Enabled/Disabled) имеют смысл для меня, но в каком случае я должен использовать IsHorizontalRailEnabled?

    Документы: True для включения горизонтальной полосы прокрутки; в противном случае - false. Значение по умолчанию - true.

uwp xaml


1 ответ


5 Решение Decade Moon [2016-10-31 11:47:00]

Сцепление прокрутки

<ScrollViewer Background="Red" Height="600">
    <ScrollViewer Background="Blue" Margin="50,150" Height="400" IsVerticalScrollChainingEnabled="False">
        <Rectangle Height="500"/>
    </ScrollViewer>
</ScrollViewer>
  • Внешний ScrollViewer имеет высоту 600 пикселей, но его содержимое имеет высоту 700 пикселей.
  • Покровитель ScrollViewer имеет высоту 400 пикселей, но его содержимое составляет 500 пикселей.
  • Оба ScrollViewers могут поэтому прокручивать по вертикали, чтобы показать, что дополнительные 100px содержимого, которые не видны.

Цепочка прокрутки определяет, будет ли прокрутка внутреннего ScrollViewer (прикосновением) повлиять на положение прокрутки внешнего ScrollViewer, когда внутренний ScrollViewer прокручивается за верхнюю или нижнюю экстенты.

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

Rail

Если у вас есть ScrollViewer с включенной горизонтальной и вертикальной прокруткой, то иногда вы хотите определить поведение прокрутки касания, так что движения, которые "почти" в горизонтальном или вертикальном направлении, блокируются на доминирующей оси. Это стандартное поведение при прокрутке веб-страниц на мобильном телефоне - прокрутка вверх и вниз по странице будет прокручивать страницу только вертикально, а не горизонтально (если ваше движение касания не является "достаточно вертикальным", и в этом случае ScrollViewer будет панорамировать вместо прокрутки только в одном направлении).

Попробуйте в Edge на мобильном телефоне. Осмотрите веб-страницу, затем прокрутите ее вертикально и продолжайте прокручивать, не отрывая палец от экрана. Посмотрите, как вы можете прокручивать только вертикально, даже если вы перемещаете палец горизонтально (все в пределах одного касания)? Эта полоса прокрутки в действии.

Диаграмма

На приведенной выше диаграмме центральная точка является начальной точкой сенсорного взаимодействия в ScrollViewer. Затем вы перемещаете свой палец (или перо, что угодно) в определенном направлении. Если вы перенесите свой палец в желтую область, ScrollViewer будет "блокировать" движение прокрутки в горизонтальном или вертикальном направлении. Если вы перенесите свой палец в синюю область, то ScrollViewer сделает вывод, что вы не пытались прокручивать в горизонтальном или вертикальном направлениях, и будете перемещать содержимое в обоих направлениях, когда вы продолжаете перемещать свой палец. Надеюсь, что это имеет смысл?