IScrollAnchorProvider Интерфейс

Определение

Указывает контракт для элемента управления прокруткой, который поддерживает привязку прокрутки.

public interface class IScrollAnchorProvider
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(2287858719, 62016, 23419, 167, 3, 191, 175, 57, 198, 162, 205)]
struct IScrollAnchorProvider
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.Guid(2287858719, 62016, 23419, 167, 3, 191, 175, 57, 198, 162, 205)]
public interface IScrollAnchorProvider
Public Interface IScrollAnchorProvider
Производный
Атрибуты

Комментарии

Привязка прокрутки

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

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

Ожидаемое поведение

Если изменение макета влияет на размер или положение элемента привязки, окно просмотра должно автоматически сместиться, чтобы сохранить предыдущее положение элемента привязки относительно окна просмотра.

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

  • Пользователь, сдвигая содержимое
  • Разработчик программно изменяет представление
  • Обработка события BringIntoViewRequested

Элемент Anchor

Реализующий элемент управления должен выбрать элемент привязки из набора ранее зарегистрированных кандидатов и установить его в качестве currentAnchor.

Элементы-кандидаты привязки

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

  1. установите для свойства UIElement.CanBeScrollAnchor значение true или
  2. программная регистрация элемента с помощью метода RegisterAnchorCandidate .

Свойство CanBeScrollAnchor можно задать в любое время. Если задано значение , платформа неявно вызывает RegisterAnchorCandidate/UnregisterAnchorCandidate, но только в первом IScrollAnchorProvider, найденном в цепочке предков этого элемента.

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

Элемент управления виртуализацией может автоматически задать CanBeScrollAnchor для созданных дочерних элементов.

ScrollViewer: пример

Элемент управления ScrollViewer выполняет привязку прокрутки во время его ArrangeOverride. Он вызывает событие AnchorRequested в начале ArrangeOverride, что дает возможность явно указать элемент привязки. В противном случае он выбирает кандидата в окне просмотра, который находится ближе всего к точке привязки относительно окна просмотра, а затем задает этот элемент в качестве своего CurrentAnchor.

Точка привязки поступает из свойств HorizontalAnchorRatio и VerticalAnchorRatio . Если коэффициенты равны нулю (по умолчанию), точка привязки является верхним левым углом окна просмотра (при условии, что FlowDirection имеет значение LeftToRight). Если оба отношения равны 0,5, точка привязки будет центром окна просмотра. Аналогичным образом, если оба коэффициента равно 1,0, точка привязки находится в правом нижнем углу окна просмотра.

Особый случай: привязка на краю

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

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

ScrollViewer обрабатывает значения 0,0 и 1,0 для свойств HorizontalAnchorRatio и VerticalAnchorRatio с особым поведением. Если значение равно 0,0 и пользователь прокручивается до начала, то начальная позиция используется в качестве привязки вместо кандидата привязки. Аналогичным образом, если значение равно 1.0 и пользователь прокручивается до конца, в качестве привязки используется конец содержимого. Если позиция конца увеличивается из-за изменения размера, используется новый конец.

Свойства

CurrentAnchor

Выбранный элемент привязки, используемый для привязки прокрутки.

Методы

RegisterAnchorCandidate(UIElement)

Регистрирует UIElement в качестве потенциального кандидата на привязку прокрутки.

UnregisterAnchorCandidate(UIElement)

Отменяет регистрацию UIElement в качестве потенциального кандидата привязки прокрутки.

Применяется к

См. также раздел