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 時將使用的原則。

預期行為

當版面配置變更會影響錨點元素的大小/位置時,檢視區應該會自動移位,以維護相對於檢視區之錨點元素的先前位置。

捲動錨定 (亦即,自動檢視區移位) 不會隨時套用。 它應該會發生在樹狀結構中新增或移除候選項目或大小變更的結果。 可能會觸發版面設定階段但不一定會導致自動檢視區移位的其他情況包括:

  • 使用者移動流覽內容
  • 以程式設計方式變更檢視的開發人員
  • 處理 BringIntoViewRequested 事件

Anchor 元素

實作控制項應該從先前註冊的候選項目集合中選擇 錨點元素 ,並將其設定為其 CurrentAnchor

候選錨點元素

一組候選錨點元素可能會在先前所述的任何情況期間變更。 元素會透過下列方式註冊為潛在的錨點候選項目:

  1. 將其 UIElement.CanBeScrollAnchor 屬性設定為 true
  2. 使用 RegisterAnchorCandidate 方法以程式設計方式註冊專案。

CanBeScrollAnchor屬性可以隨時設定。 設定時,架構會隱含地呼叫RegisterAnchorCandidate/UnregisterAnchorCandidate,但只會在該元素的上階鏈結中找到的第一個 IScrollAnchorProvider 上。

架構同樣會向 CanBeScrollAnchor 設定為 true 註冊/取消註冊元素,因為它們會從即時視覺化樹狀結構新增或移除。 但是,同樣地,它只會使用元素上階鏈中找到的第一個 IScrollAnchorProvider 來完成。

虛擬化控制項可以選擇在其產生的子項目上自動設定 CanBeScrollAnchor

ScrollViewer:範例

ScrollViewer控制項會在ScrollOverride期間執行捲動錨定。 它會在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 取消註冊為可能的捲動錨點候選項目。

適用於

另請參閱