IScrollAnchorProvider 接口

定义

指定支持滚动定位的滚动控件的协定。

public interface class IScrollAnchorProvider
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 458752)]
/// [Windows.Foundation.Metadata.Guid(1793694223, 18316, 21568, 178, 198, 234, 212, 55, 142, 248, 228)]
struct IScrollAnchorProvider
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 458752)]
[Windows.Foundation.Metadata.Guid(1793694223, 18316, 21568, 178, 198, 234, 212, 55, 142, 248, 228)]
public interface IScrollAnchorProvider
Public Interface IScrollAnchorProvider
派生
属性

Windows 要求

设备系列
Windows 10, version 1809 (在 10.0.17763.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v7.0 中引入)

注解

滚动定位

滚动定位是滚动控件自动更改其视区的位置,以防止内容明显跳转。 跳转是由内容布局的更改引起的。 滚动定位点提供程序在观察 定位点元素 在内容中的位置发生更改后应用移动。

实现滚动控件负责确定在从注册候选项集中选择 CurrentAnchor 时将使用的策略。

预期行为

当布局更改影响定位点元素的大小/位置时,视区应自动移动,以保持定位点元素相对于视区以前的位置。

滚动定位 (即自动视区移位) 并非一直适用。 这应该是由于候选元素被添加到树中或从树中删除,或者大小发生了变化。 其他可能触发布局传递但不一定导致自动视区切换的情况包括:

Anchor 元素

实现控件应从以前注册的候选项集中选择 一个定位点元素 ,并将其设置为其 CurrentAnchor

候选定位点元素

在之前调用的任何情况下,候选定位点元素集都可能会更改。 元素通过以下方式注册为潜在定位点候选项:

  1. 将其 UIElement.CanBeScrollAnchor 属性设置为 true,或
  2. 使用 RegisterAnchorCandidate 方法以编程方式注册 元素。

可以随时设置 CanBeScrollAnchor 属性。 设置后,框架将隐式调用 RegisterAnchorCandidate/UnregisterAnchorCandidate,但仅在该元素的上级链中找到的第一个 IScrollAnchorProvider。

框架同样注册/取消注册 CanBeScrollAnchor 设置为 true 的元素,因为它们从实时可视化树中添加或删除。 但是,同样,它仅使用元素的上级链中发现的第一个 IScrollAnchorProvider 来完成。

虚拟化控件可以选择在其生成的子元素上自动设置 CanBeScrollAnchor

ScrollViewer:示例

ScrollViewer 控件在其 ArrangeOverride 期间执行滚动定位。 它会在 ArrangeOverride 的开头引发 AnchorRequested 事件,这提供了显式指定定位点元素的机会。 否则,它会在视区中选择最接近视区相对 定位点 的候选项,然后将该元素设置为其 CurrentAnchor

定位点来自 HorizontalAnchorRatioVerticalAnchorRatio 属性。 如果比率为零 (默认) ,则定位点为视区左上角 (假设 FlowDirection 为 LeftToRight) 。 如果比率都设置为 0.5,则定位点是视区的中心。 同样,当比率均为 1.0 时,定位点是视区右下角。

特殊情况:在边缘定位

可滚动内容的开头或结尾表示特殊的定位点方案。 例如,考虑电子邮件应用程序中的用户垂直向下滚动列表一定数量时的预期行为。 新邮件到达时,会将其插入列表顶部, (用户当前) 看到的内容边界之外。 用户当前看到的内容不应由于新邮件到达列表顶部而突然跳转到新位置。 但是,如果当前滚动位置位于顶部,则现有内容应显示为向下移动,以便为新邮件腾出空间。

反向方案是聊天体验。 当用户滚动到最底部时,新邮件到达时,内容应显示为向上移动,以腾出显示新消息的空间。 实际上,视区需要向下移动才能跟踪可滚动内容的新端。 如果用户未滚动到内容的开头/结尾,则视区相对于一些被视为“有趣”的可见内容的位置应保持同步 (即定位) 。

ScrollViewer 使用特殊行为处理 HorizontalAnchorRatioVerticalAnchorRatio 属性的 0.0 和 1.0 值。 如果值都为 0.0,并且用户滚动到开始位置,则起始位置将用作定位点而不是定位点候选位置。 同样,如果值都为 1.0,并且用户滚动到末尾,则内容的末尾用作定位点。 如果端的位置因大小更改而增大,则使用新端。

属性

CurrentAnchor

当前选择的用于滚动定位的定位点元素。

方法

RegisterAnchorCandidate(UIElement)

UIElement 注册为潜在的滚动定位点候选项。

UnregisterAnchorCandidate(UIElement)

注销 UIElement 作为可能的滚动定位点候选项。

适用于

另请参阅