다음을 통해 공유


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에서만 호출합니다.

프레임워크는 라이브 시각적 트리에서 추가되거나 제거될 때 CanBeScrollAnchortrue 로 설정된 요소를 마찬가지로 등록/등록 취소합니다. 그러나 다시 한 번, 요소의 상위 체인에 있는 첫 번째 IScrollAnchorProvider로만 수행됩니다.

가상화 컨트롤은 생성된 자식 요소에서 CanBeScrollAnchor 를 자동으로 설정하도록 선택할 수 있습니다.

ScrollViewer: 예제

ScrollViewer 컨트롤은 ArrangeOverride 중에 스크롤 앵커링을 수행합니다. ArrangeOverride의 시작 부분에 AnchorRequested 이벤트가 발생하므로 앵커 요소를 명시적으로 지정할 수 있습니다. 그렇지 않으면 뷰포트에서 뷰포트 상대 앵커 지점에 가장 가까운 후보를 선택한 다음 해당 요소를 CurrentAnchor로 설정합니다.

앵커 지점은 HorizontalAnchorRatioVerticalAnchorRatio 속성에서 가져옵니다. 비율이 0(기본값)인 경우 앵커 포인트는 뷰포트의 왼쪽 위 모서리입니다(FlowDirection이 LeftToRight라고 가정). 비율이 모두 0.5로 설정된 경우 앵커 지점은 뷰포트의 중심입니다. 마찬가지로 비율이 모두 1.0이면 앵커 포인트가 뷰포트의 오른쪽 아래 모서리입니다.

특수 사례: 가장자리에 고정

스크롤 가능한 콘텐츠의 시작 또는 끝은 특수 앵커 시나리오를 나타냅니다. 예를 들어 전자 메일 애플리케이션의 사용자가 목록 아래로 약간 아래로 스크롤한 경우 예상되는 동작을 고려해 보세요. 새 메시지가 도착하면 목록 맨 위에 삽입됩니다(사용자가 현재 보는 콘텐츠 범위 외부). 목록 맨 위에 새 메시지가 도착하여 사용자에게 현재 표시되는 내용이 갑자기 새 위치로 이동해서는 안 됩니다. 그러나 현재 스크롤 위치가 맨 위에 있는 경우 기존 콘텐츠가 아래로 이동하여 새 메시지를 위한 공간을 확보해야 합니다.

역 시나리오는 채팅 환경입니다. 사용자가 맨 아래로 스크롤되고 새 메시지가 도착하면 콘텐츠가 위로 이동하여 새 메시지를 표시할 공간을 만들어야 합니다. 실제로 뷰포트는 스크롤 가능한 콘텐츠의 새 끝을 추적하기 위해 아래로 이동해야 합니다. 사용자가 콘텐츠의 시작/끝으로 스크롤되지 않은 경우 "흥미로운" 것으로 간주되는 일부 표시되는 콘텐츠와 관련하여 뷰포트의 위치는 동기화된 상태로 유지되어야 합니다(즉, 고정됨).

ScrollViewer는 HorizontalAnchorRatioVerticalAnchorRatio 속성의 값을 0.0 및 1.0으로 특수 동작으로 처리합니다. 두 값이 모두 0.0이고 사용자가 시작 위치로 스크롤되면 시작 위치가 앵커 후보 대신 앵커로 사용됩니다. 마찬가지로 두 값이 모두 1.0이고 사용자가 끝까지 스크롤되면 콘텐츠의 끝이 앵커로 사용됩니다. 크기 변경으로 인해 끝의 위치가 커지면 새 끝이 사용됩니다.

속성

CurrentAnchor

스크롤 앵커링에 사용할 현재 선택된 앵커 요소입니다.

메서드

RegisterAnchorCandidate(UIElement)

UIElement를 잠재적인 스크롤 앵커 후보로 등록합니다.

UnregisterAnchorCandidate(UIElement)

잠재적인 스크롤 앵커 후보로 UIElement 를 등록 취소합니다.

적용 대상

추가 정보