Compartir a través de


IScrollAnchorProvider Interfaz

Definición

Especifica un contrato para un control de desplazamiento que admite el delimitador de desplazamiento.

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
Derivado
Atributos

Comentarios

Delimitación de desplazamiento

El delimitador de desplazamiento es cuando un control de desplazamiento cambia automáticamente la posición de su ventanilla para evitar que el contenido salte visiblemente. El salto se debe a un cambio en el diseño del contenido. El proveedor de delimitadores de desplazamiento aplica un desplazamiento después de observar un cambio en la posición de un elemento de delimitador dentro del contenido.

Es responsabilidad del control de desplazamiento de implementación determinar qué directiva usará para elegir un CurrentAnchor del conjunto de candidatos registrados.

Comportamiento esperado

Cuando un cambio de diseño afecta al tamaño o posición del elemento de anclaje, la ventanilla debe desplazarse automáticamente para mantener la posición anterior del elemento de anclaje en relación con la ventanilla.

El delimitador de desplazamiento (es decir, un desplazamiento automático de ventanilla) no se aplica en todo momento. Debe ocurrir como resultado de que los elementos candidatos se agreguen o quiten del árbol o cambien de tamaño. Otras situaciones que pueden desencadenar un pase de diseño, pero no necesariamente provocarían cambios automáticos en la ventanilla:

  • Un usuario que desplaza el contenido
  • Un desarrollador cambia mediante programación la vista
  • Control de un evento BringIntoViewRequested

Elemento Anchor

El control de implementación debe elegir un elemento de delimitador del conjunto de candidatos registrados previamente y establecerlo como su CurrentAnchor.

Elementos Delimitadores candidatos

El conjunto de elementos de anclaje candidatos puede cambiar durante cualquiera de las situaciones que se han llamado anteriormente. Los elementos se registran como posibles candidatos de anclaje por:

  1. establecer su propiedad UIElement.CanBeScrollAnchor en true o
  2. Registrar mediante programación el elemento mediante el método RegisterAnchorCandidate .

La propiedad CanBeScrollAnchor se puede establecer en cualquier momento. Cuando se establece, el marco llama implícitamente a RegisterAnchorCandidate/UnregisterAnchorCandidate, pero solo en el primer IScrollAnchorProvider encontrado en la cadena de antecesores de ese elemento.

El marco registra o anula el registro de elementos con CanBeScrollAnchor establecido en true a medida que se agregan o quitan del árbol visual activo. Pero, una vez más, solo se hace con el primer IScrollAnchorProvider encontrado en la cadena de antecesores del elemento.

Un control de virtualización puede optar por establecer automáticamente CanBeScrollAnchor en sus elementos secundarios generados.

ScrollViewer: un ejemplo

El control ScrollViewer realiza el delimitador de desplazamiento durante su ArrangeOverride. Genera un evento AnchorRequested al principio de ArrangeOverride, que proporciona la oportunidad de especificar explícitamente el elemento de anclaje. De lo contrario, elige un candidato en la ventanilla más cercana a un punto de anclaje relativo a la ventanilla y, a continuación, establece ese elemento como su CurrentAnchor.

El punto de anclaje procede de las propiedades HorizontalAnchorRatio y VerticalAnchorRatio . Cuando las relaciones son cero (valor predeterminado), el punto de anclaje es la esquina superior izquierda de la ventanilla (suponiendo que FlowDirection es LeftToRight). Si las relaciones se establecen en 0,5, el punto de anclaje es el centro de la ventanilla. De forma similar, cuando las relaciones son 1,0, el punto de anclaje es la esquina inferior derecha de la ventanilla.

Caso especial: anclaje en el borde

El principio o final del contenido desplazable representa un escenario de anclaje especial. Por ejemplo, considere el comportamiento esperado cuando un usuario de una aplicación de correo electrónico ha desplazado verticalmente hacia abajo la lista por alguna cantidad. Cuando llega un nuevo mensaje, se inserta en la parte superior de la lista (fuera de los límites de contenido que ve actualmente el usuario). Lo que ve actualmente el usuario no debería saltar repentinamente a una nueva posición debido a la llegada de un nuevo mensaje en la parte superior de la lista. Sin embargo, si su posición de desplazamiento actual está en la parte superior, el contenido existente debería aparecer para desplazarse hacia abajo para dejar espacio para el nuevo mensaje.

El escenario inverso es una experiencia de chat. Cuando el usuario se desplaza hacia la parte inferior y aparece un nuevo mensaje, el contenido debería aparecer para desplazarse hasta hacer espacio para mostrar el nuevo mensaje. En realidad, lo que sucede es que la ventanilla debe desplazarse hacia abajo para realizar un seguimiento del nuevo final del contenido desplazable. Cuando el usuario no se desplaza hasta el principio o el final del contenido, la posición de la ventanilla con respecto a algún contenido visible que se considera "interesante" debe permanecer sincronizado (es decir, anclado).

ScrollViewer trata los valores de 0.0 y 1.0 para las propiedades HorizontalAnchorRatio y VerticalAnchorRatio con un comportamiento especial. Si el valor es 0,0 y el usuario se desplaza hasta el inicio, la posición inicial se usa como delimitador en lugar de como candidato de anclaje. Del mismo modo, si el valor es 1.0 y el usuario se desplaza al final, el final del contenido se usa como delimitador. Si la posición del final crece debido a cambios de tamaño, se usa el nuevo final.

Propiedades

CurrentAnchor

Elemento de delimitador elegido actualmente que se va a usar para el delimitador de desplazamiento.

Métodos

RegisterAnchorCandidate(UIElement)

Registra un UIElement como posible candidato de delimitador de desplazamiento.

UnregisterAnchorCandidate(UIElement)

Anula el registro de un UIElement como posible candidato de delimitador de desplazamiento.

Se aplica a

Consulte también