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 でのみ呼び出します。

フレームワークは同様に、 CanBeScrollAnchortrue に設定された状態で要素を登録/登録解除します。これは、ライブ ビジュアル ツリーに追加または削除される場合です。 しかし、もう一度、これは要素の先祖のチェーンに見つかった最初の IScrollAnchorProvider でのみ行われます。

仮想化コントロールは、生成された子要素に CanBeScrollAnchor を 自動的に設定することを選択できます。

ScrollViewer: 例

ScrollViewer コントロールは、ArrangeOverride 中にスクロール アンカーを実行します。 ArrangeOverride の先頭に AnchorRequested イベントが発生します。これにより、アンカー要素を明示的に指定する機会が提供されます。 それ以外の場合は、ビューポートの相対 アンカー ポイント に最も近いビューポート内の候補を選択し、その要素を CurrentAnchor として設定します。

アンカー ポイントは HorizontalAnchorRatio プロパティと VerticalAnchorRatio プロパティから取得されます。 比率が 0 (既定値) の場合、アンカー ポイントはビューポートの左上隅です (FlowDirection が LeftToRight であると仮定)。 比率が両方とも 0.5 に設定されている場合、アンカー ポイントはビューポートの中心になります。 同様に、比率が両方とも 1.0 の場合、アンカー ポイントはビューポートの右下隅になります。

特殊なケース: エッジでのアンカー

スクロール可能なコンテンツの先頭または末尾は、特殊なアンカー シナリオを表します。 たとえば、電子メール アプリケーションのユーザーがリストをある程度上下にスクロールした場合の想定される動作を考えてみましょう。 新しいメッセージが到着すると、リストの上部 (ユーザーが現在表示しているコンテンツの範囲外) に挿入されます。 ユーザーが現在表示しているものは、リストの上部に新しいメッセージが到着したため、突然新しい位置にジャンプすることはできません。 ただし、現在のスクロール位置が上部にある場合は、既存のコンテンツが下にシフトして新しいメッセージのスペースを確保するように表示されます。

逆のシナリオは、チャット エクスペリエンスです。 ユーザーが一番下までスクロールされ、新しいメッセージが到着すると、新しいメッセージを表示するスペースを確保するために、コンテンツが上にシフトするように見えるはずです。 実際には、スクロール可能なコンテンツの新しい終了を追跡するためにビューポートを下にシフトする必要があります。 ユーザーがコンテンツの先頭/末尾までスクロールされない場合は、"興味深い" と見なされる一部の表示コンテンツに対するビューポートの位置が同期されたままになります (つまり、アンカー付き)。

ScrollViewer は、HorizontalAnchorRatio プロパティと VerticalAnchorRatio プロパティの 0.0 と 1.0 の値を特別な動作で処理します。 両方の値が 0.0 で、ユーザーが開始位置までスクロールした場合、開始位置はアンカー候補ではなくアンカーとして使用されます。 同様に、両方の値が 1.0 で、ユーザーが最後までスクロールされた場合、コンテンツの末尾がアンカーとして使用されます。 サイズの変更によって終了位置が大きくなる場合は、新しい終了が使用されます。

プロパティ

CurrentAnchor

スクロール アンカーに使用する現在選択されているアンカー要素。

メソッド

RegisterAnchorCandidate(UIElement)

潜在的なスクロール アンカー候補として UIElement を登録します。

UnregisterAnchorCandidate(UIElement)

潜在的なスクロール アンカー候補として UIElement の登録を解除します。

適用対象

こちらもご覧ください