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

預期行為

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

捲動錨定 (亦即自動檢視區輪班) 不會隨時套用。 它應該會因為候選專案加入樹狀結構或大小變更而新增或移除。 可能會觸發版面配置傳遞但不一定會導致自動檢視區輪班的其他情況包括:

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 取消註冊為可能的捲動錨點候選專案。

適用於

另請參閱