Compartilhar via


IScrollAnchorProvider Interface

Definição

Especifica um contrato para um controle de rolagem que dá suporte à ancoragem de rolagem.

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

Requisitos do Windows

Família de dispositivos
Windows 10, version 1809 (introduzida na 10.0.17763.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v7.0)

Comentários

Ancoragem de rolagem

A ancoragem de rolagem ocorre quando um controle de rolagem altera automaticamente a posição de seu visor para impedir que o conteúdo pule visivelmente. O salto é causado por uma alteração no layout do conteúdo. O provedor de âncora de rolagem aplica uma mudança depois de observar uma alteração na posição de um elemento de âncora dentro do conteúdo.

É responsabilidade da implementação do controle de rolagem determinar qual política ele usará na escolha de um CurrentAnchor do conjunto de candidatos registrados.

Comportamento esperado

Quando uma alteração de layout afeta o tamanho/posição do elemento de âncora, o visor deve mudar automaticamente para manter a posição anterior do elemento de âncora em relação ao visor.

A ancoragem de rolagem (ou seja, um deslocamento automático do visor) não se aplica em todos os momentos. Isso deve acontecer como resultado da adição ou remoção de elementos candidatos da árvore ou alteração de tamanho. Outras situações que podem disparar uma passagem de layout, mas não necessariamente causam deslocamentos automáticos do visor, incluiriam:

  • Um usuário que está pesquisando o conteúdo
  • Um desenvolvedor alterando programaticamente a exibição
  • Manipulando um evento BringIntoViewRequested

O elemento Anchor

O controle de implementação deve escolher um elemento de âncora do conjunto de candidatos registrados anteriormente e defini-lo como seu CurrentAnchor.

Elementos de âncora de candidato

O conjunto de elementos de âncora candidato pode mudar durante qualquer uma das situações destacadas anteriormente. Os elementos são registrados como potenciais candidatos a âncora:

  1. definindo sua propriedade UIElement.CanBeScrollAnchor como true ou
  2. registrando programaticamente o elemento usando o método RegisterAnchorCandidate .

A propriedade CanBeScrollAnchor pode ser definida a qualquer momento. Quando definida, a estrutura chama implicitamente RegisterAnchorCandidate/UnregisterAnchorCandidate, mas somente no primeiro IScrollAnchorProvider encontrado na cadeia de ancestrais desse elemento.

A estrutura registra/cancela o registro de elementos da mesma forma com CanBeScrollAnchor definido como true à medida que são adicionados ou removidos da árvore visual dinâmica. Mas, mais uma vez, isso só é feito com o primeiro IScrollAnchorProvider encontrado na cadeia de ancestrais do elemento.

Um controle de virtualização pode optar por definir automaticamente o CanBeScrollAnchor em seus elementos filhos gerados.

ScrollViewer: um exemplo

O controle ScrollViewer executa a ancoragem de rolagem durante seu ArrangeOverride. Ele gera um evento AnchorRequested no início de ArrangeOverride, que oferece a você a oportunidade de especificar explicitamente o elemento de âncora. Caso contrário, ele escolhe um candidato no visor mais próximo de um ponto de âncora relativo ao visor e, em seguida, define esse elemento como seu CurrentAnchor.

O ponto de âncora vem das propriedades HorizontalAnchorRatio e VerticalAnchorRatio . Quando as proporções são zero (padrão), o ponto de âncora é o canto superior esquerdo do visor (supondo que FlowDirection seja LeftToRight). Se as taxas forem definidas como 0,5, o ponto de âncora será o centro do visor. Da mesma forma, quando as proporções são 1,0, o ponto de âncora é o canto inferior direito do visor.

Caso especial: ancoragem na borda

O início ou o fim do conteúdo rolável representa um cenário de âncora especial. Por exemplo, considere o comportamento esperado quando um usuário em um aplicativo de email tiver rolado verticalmente para baixo na lista em algum valor. Quando uma nova mensagem chega, ela é inserida na parte superior da lista (fora dos limites de conteúdo que o usuário vê no momento). O que o usuário vê atualmente não deve saltar repentinamente para uma nova posição devido à chegada de uma nova mensagem na parte superior da lista. No entanto, se a posição de rolagem atual estiver na parte superior, o conteúdo existente deverá aparecer para deslocar para baixo para abrir espaço para a nova mensagem.

O cenário inverso é uma experiência de chat. Quando o usuário é rolado até a parte inferior e uma nova mensagem chega, o conteúdo deve aparecer para deslocar para cima para abrir espaço para exibir a nova mensagem. Na realidade, o que acontece é que o visor precisa mudar para baixo para acompanhar a nova extremidade do conteúdo rolável. Quando o usuário não é rolado até o início/fim do conteúdo, a posição do visor em relação a algum conteúdo visível considerado "interessante" deve permanecer em sincronia (ou seja, ancorado).

O ScrollViewer trata os valores de 0,0 e 1,0 para as propriedades HorizontalAnchorRatio e VerticalAnchorRatio com comportamento especial. Se o valor for 0,0 e o usuário for rolado até o início, a posição inicial será usada como âncora em vez de uma âncora candidata. Da mesma forma, se o valor for 1,0 e o usuário for rolado até o final, o final do conteúdo será usado como âncora. Se a posição do final aumentar devido a alterações de tamanho, a nova extremidade será usada.

Propriedades

CurrentAnchor

O elemento de âncora escolhido no momento a ser usado para ancoragem de rolagem.

Métodos

RegisterAnchorCandidate(UIElement)

Registra um UIElement como um potencial candidato à âncora de rolagem.

UnregisterAnchorCandidate(UIElement)

Cancela o registro de um UIElement como um potencial candidato à âncora de rolagem.

Aplica-se a

Confira também