Xamarin.Forms Прокрутка CarouselView
CarouselView
определяет следующие свойства прокрутки:
HorizontalScrollBarVisibility
, типScrollBarVisibility
, который указывает, когда горизонтальная полоса прокрутки видна.IsDragging
bool
тип , который указывает, выполняется лиCarouselView
прокрутка. Это свойство только для чтения, значение по умолчанию которого равноfalse
.IsScrollAnimated
bool
тип , который указывает, будет ли анимация возникать при прокруткеCarouselView
. Значение по умолчанию —true
.ItemsUpdatingScrollMode
типItemsUpdatingScrollMode
, представляющий поведениеCarouselView
прокрутки при добавлении новых элементов в него.VerticalScrollBarVisibility
ScrollBarVisibility
тип , который указывает, когда отображается вертикальная полоса прокрутки.
Все эти свойства поддерживаются объектами, что означает, что они могут быть целевыми BindableProperty
объектами привязки данных.
CarouselView
также определяет два ScrollTo
метода, которые прокручивают элементы в представление. Одна из перегрузок прокручивает элемент по указанному индексу в представление, а другой прокручивает указанный элемент в представление. Обе перегрузки имеют дополнительные аргументы, которые можно указать, чтобы указать точное положение элемента после завершения прокрутки, и следует ли анимировать прокрутку.
CarouselView
ScrollToRequested
определяет событие, которое запускается при вызове ScrollTo
одного из методов. ОбъектScrollToRequestedEventArgs
, сопровождающий ScrollToRequested
событие, имеет множество свойств, включая IsAnimated
, Index
Item
и ScrollToPosition
. Эти свойства задаются из аргументов, указанных в ScrollTo
вызовах метода.
Кроме того, CarouselView
определяет Scrolled
событие, которое запускается, чтобы указать, что произошла прокрутка. Объект ItemsViewScrolledEventArgs
, сопровождающий Scrolled
событие, имеет множество свойств. Дополнительные сведения см. в разделе "Обнаружение прокрутки".
Когда пользователь проводит пальцем, чтобы инициировать прокрутку, можно управлять конечной позицией прокрутки, чтобы элементы были полностью отображены. Эта функция называется привязкой, так как элементы привязываются к расположению при остановке прокрутки. Дополнительные сведения см. в разделе "Точки привязки".
CarouselView
также может загружать данные постепенно по мере прокрутки пользователя. Дополнительные сведения см. в разделе "Загрузка данных" постепенно.
Обнаружение прокрутки
Свойство IsDragging
можно проверить, чтобы определить, выполняется ли CarouselView
прокрутка элементов в данный момент.
Кроме того, определяет Scrolled
событие, CarouselView
которое запускается, чтобы указать, что произошла прокрутка. Это событие следует использовать при необходимости данных о прокрутке.
В следующем примере XAML показан CarouselView
обработчик событий для Scrolled
события:
<CarouselView Scrolled="OnCollectionViewScrolled">
...
</CarouselView>
Эквивалентный код на C# выглядит так:
CarouselView carouselView = new CarouselView();
carouselView.Scrolled += OnCarouselViewScrolled;
В этом примере OnCarouselViewScrolled
кода обработчик событий выполняется при Scrolled
срабатывании события:
void OnCarouselViewScrolled(object sender, ItemsViewScrolledEventArgs e)
{
Debug.WriteLine("HorizontalDelta: " + e.HorizontalDelta);
Debug.WriteLine("VerticalDelta: " + e.VerticalDelta);
Debug.WriteLine("HorizontalOffset: " + e.HorizontalOffset);
Debug.WriteLine("VerticalOffset: " + e.VerticalOffset);
Debug.WriteLine("FirstVisibleItemIndex: " + e.FirstVisibleItemIndex);
Debug.WriteLine("CenterItemIndex: " + e.CenterItemIndex);
Debug.WriteLine("LastVisibleItemIndex: " + e.LastVisibleItemIndex);
}
В этом примере OnCarouselViewScrolled
обработчик событий выводит значения ItemsViewScrolledEventArgs
объекта, сопровождающего событие.
Внимание
Событие Scrolled
запускается для прокручиваемых пользователем прокрутк и для программных прокрутк.
Прокрутка элемента по индексу в представление
ScrollTo
Первая перегрузка метода прокручивает элемент по указанному индексу в представление. При указании CarouselView
объекта с именем carouselView
в следующем примере показано, как прокрутить элемент по индексу 6 в представление:
carouselView.ScrollTo(6);
Примечание.
Событие ScrollToRequested
запускается при вызове ScrollTo
метода.
Прокрутка элемента в представление
Вторая ScrollTo
перегрузка метода прокручивает указанный элемент в представление. Учитывая CarouselView
объект с именем carouselView
, в следующем примере показано, как прокрутить элемент Обезьяны Proboscis в представление:
MonkeysViewModel viewModel = BindingContext as MonkeysViewModel;
Monkey monkey = viewModel.Monkeys.FirstOrDefault(m => m.Name == "Proboscis Monkey");
carouselView.ScrollTo(monkey);
Примечание.
Событие ScrollToRequested
запускается при вызове ScrollTo
метода.
Отключение анимации прокрутки
При перемещении между элементами в элементе CarouselView
отображается анимация прокрутки. Эта анимация выполняется как для прокручиваемых пользователем прокрутк, так и для программных прокрутк. IsScrollAnimated
Задание свойства false
для отключения анимации для обеих категорий прокрутки.
Кроме того, animate
аргумент ScrollTo
метода можно задать для false
отключения анимации прокрутки на программных прокрутках:
carouselView.ScrollTo(monkey, animate: false);
Положение прокрутки элемента управления
При прокрутке элемента в представление точное положение элемента после завершения прокрутки можно указать с position
аргументом ScrollTo
методов. Этот аргумент принимает ScrollToPosition
член перечисления.
MakeVisible
Элемент ScrollToPosition.MakeVisible
указывает, что элемент должен быть прокручен до тех пор, пока он не отображается в представлении:
carouselView.ScrollTo(monkey, position: ScrollToPosition.MakeVisible);
Этот пример кода приводит к минимальной прокрутке, необходимой для прокрутки элемента в представление.
Примечание.
Элемент ScrollToPosition.MakeVisible
используется по умолчанию, если position
аргумент не указан при вызове ScrollTo
метода.
Начать
Элемент ScrollToPosition.Start
указывает, что элемент должен прокручиваться до начала представления:
carouselView.ScrollTo(monkey, position: ScrollToPosition.Start);
Этот пример кода приводит к прокрутке элемента до начала представления.
Центр
Элемент ScrollToPosition.Center
указывает, что элемент должен быть прокручен в центр представления:
carouselViewView.ScrollTo(monkey, position: ScrollToPosition.Center);
Этот пример кода приводит к прокрутке элемента в центр представления.
Завершить
Элемент ScrollToPosition.End
указывает, что элемент должен быть прокручен до конца представления:
carouselViewView.ScrollTo(monkey, position: ScrollToPosition.End);
Этот пример кода приводит к прокрутке элемента до конца представления.
Управление положением прокрутки при добавлении новых элементов
CarouselView
определяет ItemsUpdatingScrollMode
свойство, которое поддерживается привязываемым свойством. Это свойство получает или задает ItemsUpdatingScrollMode
значение перечисления, представляющее поведение CarouselView
прокрутки при добавлении в него новых элементов. Перечисление ItemsUpdatingScrollMode
определяет следующие члены:
KeepItemsInView
сохраняет первый элемент в списке, отображаемый при добавлении новых элементов.KeepScrollOffset
гарантирует, что текущая позиция прокрутки сохраняется при добавлении новых элементов.KeepLastItemInView
настраивает смещение прокрутки, чтобы сохранить последний элемент в списке, отображаемом при добавлении новых элементов.
Значение ItemsUpdatingScrollMode
свойства по умолчанию — KeepItemsInView
. Поэтому при добавлении новых элементов в CarouselView
первый элемент в списке будет отображаться. Чтобы убедиться, что последний элемент в списке отображается при добавлении новых элементов, задайте ItemsUpdatingScrollMode
для свойства KeepLastItemInView
значение :
<CarouselView ItemsUpdatingScrollMode="KeepLastItemInView">
...
</CarouselView>
Эквивалентный код на C# выглядит так:
CarouselView carouselView = new CarouselView
{
ItemsUpdatingScrollMode = ItemsUpdatingScrollMode.KeepLastItemInView
};
Видимость полосы прокрутки
CarouselView
HorizontalScrollBarVisibility
определяет и VerticalScrollBarVisibility
свойства, которые поддерживаются привязываемыми свойствами. Эти свойства получают или задают ScrollBarVisibility
значение перечисления, представляющее, когда отображается горизонтальная или вертикальная полоса прокрутки. Перечисление ScrollBarVisibility
определяет следующие члены:
Default
указывает поведение полосы прокрутки по умолчанию для платформы и является значением по умолчанию дляHorizontalScrollBarVisibility
свойств иVerticalScrollBarVisibility
свойств.Always
указывает, что полосы прокрутки будут видимыми, даже если содержимое помещается в представление.Never
указывает, что полосы прокрутки не будут видимыми, даже если содержимое не помещается в представление.
Точки прикрепления
Когда пользователь проводит пальцем, чтобы инициировать прокрутку, можно управлять конечной позицией прокрутки, чтобы элементы были полностью отображены. Эта функция называется привязкой, так как элементы привязываются к расположению при остановке прокрутки и управляются следующими свойствами из ItemsLayout
класса:
SnapPointsType
SnapPointsType
Тип , указывает поведение точек оснастки при прокрутке.SnapPointsAlignment
Тип , указывает, как точки привязкиSnapPointsAlignment
выравниваются с элементами.
Эти свойства поддерживаются BindableProperty
объектами, что означает, что свойства могут быть целевыми объектами привязки данных.
Примечание.
При снимке происходит в направлении, которое создает наименьший объем движения.
Тип точек привязки
Перечисление SnapPointsType
определяет следующие члены:
None
указывает, что прокрутка не привязывается к элементам.Mandatory
указывает, что содержимое всегда привязывается к ближайшей точке оснастки, где прокрутка естественно остановится, вдоль направления инерции.MandatorySingle
указывает на то же поведение, что иMandatory
при прокрутке одного элемента за раз.
По умолчанию CarouselView
для свойства задано SnapPointsType.MandatorySingle
значение , SnapPointsType
которое гарантирует, что прокрутка выполняет прокрутку только одного элемента одновременно.
На следующих снимках CarouselView
экрана показан отключена привязка:
Выравнивание точек привязки
Перечисление SnapPointsAlignment
определяет Start
и Center
End
элементы.
Внимание
Значение SnapPointsAlignment
свойства учитывается только в том случае, если SnapPointsType
для свойства задано значение Mandatory
, или MandatorySingle
.
Начать
Элемент SnapPointsAlignment.Start
указывает, что точки привязки выровнены с передним краем элементов. В следующем примере XAML показано, как задать этот элемент перечисления:
<CarouselView ItemsSource="{Binding Monkeys}"
PeekAreaInsets="100">
<CarouselView.ItemsLayout>
<LinearItemsLayout Orientation="Horizontal"
SnapPointsType="MandatorySingle"
SnapPointsAlignment="Start" />
</CarouselView.ItemsLayout>
...
</CarouselView>
Эквивалентный код на C# выглядит так:
CarouselView carouselView = new CarouselView
{
ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal)
{
SnapPointsType = SnapPointsType.MandatorySingle,
SnapPointsAlignment = SnapPointsAlignment.Start
},
// ...
};
Когда пользователь проводит пальцем, чтобы инициировать прокрутку в горизонтальной прокрутке CarouselView
, левый элемент будет выровнен слева от представления:
Центр
Элемент SnapPointsAlignment.Center
указывает, что точки привязки выровнены с центром элементов.
По умолчанию CarouselView
SnapPointsAlignment
для свойства задано Center
значение . Однако для полноты в следующем примере XAML показано, как задать этот элемент перечисления:
<CarouselView ItemsSource="{Binding Monkeys}"
PeekAreaInsets="100">
<CarouselView.ItemsLayout>
<LinearItemsLayout Orientation="Horizontal"
SnapPointsType="MandatorySingle"
SnapPointsAlignment="Center" />
</CarouselView.ItemsLayout>
...
</CarouselView>
Эквивалентный код на C# выглядит так:
CarouselView carouselView = new CarouselView
{
ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal)
{
SnapPointsType = SnapPointsType.MandatorySingle,
SnapPointsAlignment = SnapPointsAlignment.Center
},
// ...
};
Когда пользователь проводит пальцем, чтобы инициировать прокрутку в горизонтальной прокрутке CarouselView
, центральный элемент будет выровнен по центру представления:
Завершить
Элемент SnapPointsAlignment.End
указывает, что точки привязки выравниваются с конечным краем элементов. В следующем примере XAML показано, как задать этот элемент перечисления:
<CarouselView ItemsSource="{Binding Monkeys}"
PeekAreaInsets="100">
<CarouselView.ItemsLayout>
<LinearItemsLayout Orientation="Horizontal"
SnapPointsType="MandatorySingle"
SnapPointsAlignment="End" />
</CarouselView.ItemsLayout>
...
</CarouselView>
Эквивалентный код на C# выглядит так:
CarouselView carouselView = new CarouselView
{
ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal)
{
SnapPointsType = SnapPointsType.MandatorySingle,
SnapPointsAlignment = SnapPointsAlignment.End
},
// ...
};
Когда пользователь проводит пальцем, чтобы инициировать прокрутку в горизонтальной прокрутке CarouselView
, правый элемент будет выровнен справа от представления.