Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando houver mais conteúdo da interface do usuário para mostrar do que você pode caber em uma área, use um controle de visualizador de rolagem.
Os visualizadores de rolagem permitem que o conteúdo se estenda além dos limites da janela de visualização (área visível). Os usuários alcançam esse conteúdo manipulando a superfície do visualizador de rolagem por meio de toque, roda do mouse, teclado ou gamepad, ou usando o cursor do mouse ou da caneta para interagir com a barra de rolagem do visualizador.
Consoante a situação, a barra de rolagem do controlo de scroll utiliza duas visualizações diferentes, mostradas na ilustração a seguir: o indicador de varrimento (à esquerda) e o cursor tradicional da barra de rolagem (à direita).
Importante
WinUI 3 tem dois controles de visualizador de rolagem diferentes disponíveis: ScrollViewer e ScrollView. Sempre que falamos genericamente sobre controles de visualizador de rolagem , as informações se aplicam a ambos os controles.
O ScrollView controle é semelhante em comportamento e uso ao ScrollViewer controle, mas é baseado em InteractionTracker, tem novos recursos, como alterações de exibição orientadas por animação, e é projetado para garantir a funcionalidade completa com ItemsRepeater.
Rolagem, deslocamento e zoom
Utilize um controlo de scroll para permitir a rolagem, panorâmica e zoom do seu conteúdo.
- Rolagem: mover o conteúdo vertical ou horizontalmente arrastando o polegar da barra de rolagem ou usando a roda de rolagem em um mouse.
-
Movimento panorâmico: mover conteúdo vertical ou horizontalmente usando toque ou caneta.
- Para saber mais sobre rolagem e movimento panorâmico, veja Diretrizes para movimento panorâmico.
-
Zoom: aumenta ou diminui opticamente a escala do conteúdo.
- Para saber mais sobre zoom, veja Zoom ótico e redimensionamento.
A barra de rolagem está consciente do método de entrada do usuário e usa-o para determinar qual visualização exibir.
- Quando a região é rolada sem manipular a barra de rolagem diretamente, por exemplo, por toque, o indicador de deslocamento aparece, exibindo a posição de rolagem atual.
- Quando o cursor do mouse ou da caneta se move sobre o indicador de panorâmica, ele se transforma na barra de rolagem tradicional. Arrastar o polegar da barra de rolagem manipula a região de rolagem.
Observação
Quando a barra de rolagem está visível, ela é sobreposta como 16px sobre o conteúdo dentro do seu ScrollViewer. Para garantir um bom design de UX, você vai querer garantir que nenhum conteúdo interativo seja obscurecido por essa sobreposição. Além disso, se preferir não ter sobreposição de UX, deixe 16px de margem na borda do ecrã para permitir a barra de rolagem.
Viewport e extensão
Um visualizador de rolagem é composto por duas regiões principais que são importantes para entender sua funcionalidade. A área que abrange todo o conteúdo rolável, incluindo o oculto e o visível, é conhecida como extensão. A área visível do controlo onde o conteúdo é mostrado é o viewport.
Várias APIs estão disponíveis que permitem obter a altura e a largura dessas regiões, bem como a altura e a largura navegáveis, que é a diferença entre o tamanho da extensão total e o tamanho da área de visualização.
Recommendations
- Sempre que possível, projete para rolagem vertical em vez de horizontal.
- Utilize o deslocamento em um eixo para regiões de conteúdo que se estendem além de um limite de visualização (vertical ou horizontal). Use o movimento panorâmico de dois eixos para regiões de conteúdo que se estendem além dos limites da janela de visualização (vertical e horizontal).
- Utilize a funcionalidade de deslocamento incorporada na exibição de itens, exibição de lista, exibição de grelha, caixa de combinação, caixa de listagem, caixa de entrada de texto e nos controlos de hub. Com esses controles, se houver muitos itens para mostrar todos de uma vez, o usuário poderá rolar horizontal ou verticalmente sobre a lista de itens.
- Se você quiser que o usuário faça movimento panorâmico em ambas as direções em torno de uma área maior e, possivelmente, aplique zoom também, por exemplo, se quiser permitir que o usuário faça movimento panorâmico e zoom sobre uma imagem em tamanho real (em vez de uma imagem dimensionada para caber na tela), coloque a imagem dentro de um visualizador de rolagem.
- Se o usuário percorrer uma longa passagem de texto, configure o visualizador de rolagem para rolar apenas verticalmente.
- Use um visualizador de rolagem para conter apenas um objeto. Observe que um objeto pode ser um painel de layout, por sua vez contendo qualquer número de objetos próprios.
- Se você precisar manipular eventos de ponteiro para um UIElement em um modo de exibição rolável (como um ScrollViewer ou ListView), deverá desabilitar explicitamente o suporte para eventos de manipulação no elemento no modo de exibição chamando UIElement.CancelDirectManipulation. Para reativar eventos de manipulação no modo de exibição, chame UIElement.TryStartDirectManipulation.
Criar um visualizador de rolagem
- APIs importantes:classe ScrollView, classe ScrollViewer, classe ScrollBar
Abra o aplicativo WinUI 3 Gallery e veja o ScrollView em ação
Abra o aplicativo WinUI 3 Gallery e veja o ScrollViewer em ação
O aplicativo WinUI 3 Gallery inclui exemplos interativos da maioria dos controles, recursos e funcionalidades do WinUI 3. Obtenha o aplicativo no da Microsoft Store ou obtenha o código-fonte em do GitHub
Um controle de visualizador de rolagem pode ser usado para tornar o conteúdo rolável encapsulando explicitamente o conteúdo no visualizador de rolagem ou colocando um visualizador de rolagem no modelo de controle de um controle de conteúdo.
Visualizador de rolagem em um modelo de controle
É típico que um controle de visualizador de rolagem exista como uma parte composta de outros controles. Uma parte do visualizador de rolagem exibirá uma janela de visualização junto com barras de rolagem somente quando o espaço de layout do controle de host estiver sendo restringido menor do que o tamanho do conteúdo expandido.
ItemsView inclui um ScrollView controle em seu modelo. Você pode acessar a ScrollView através da propriedade ItemsView.ScrollView.
ListView e GridView templates sempre incluem um ScrollViewer.
TextBox e RichEditBox também incluem um ScrollViewer em seus modelos. Para influenciar alguns dos comportamentos e propriedades da parte integrada ScrollViewer, ScrollViewer define várias propriedades anexadas XAML que podem ser definidas em estilos e usadas em ligações de modelo. Para saber mais sobre propriedades anexadas, veja Visão geral das propriedades anexadas.
Definir conteúdo rolável
O conteúdo dentro de um visualizador de rolagem torna-se rolável quando é maior do que a janela de visualização do visualizador de rolagem
Este exemplo define a Rectangle como o conteúdo do ScrollView controle. O usuário vê apenas uma parte de 500x400 desse retângulo e pode rolar para ver o resto dele.
<ScrollView Width="500" Height="400">
<Rectangle Width="1000" Height="800">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1.0" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
</ScrollView>
Esquema
No exemplo anterior, o tamanho do retângulo é explicitamente definido como maior do que o visualizador de rolagem. Nos casos em que o conteúdo do visualizador de rolagem pode crescer naturalmente, como em uma lista ou bloco de texto, você pode configurar o visualizador de rolagem para permitir que seu conteúdo (a extensão) se expanda verticalmente, horizontalmente, ambos ou nenhum.
Por exemplo, esse bloco de texto crescerá horizontalmente até que seu contêiner pai o restrinja, depois quebrará o texto e crescerá verticalmente.
<TextBlock Text="{x:Bind someText}" TextWrapping="WrapWholeWords"/>
Quando o bloco de texto é embalado em um navegador de scroll, o navegador de scroll restringe o seu crescimento horizontal e vertical.
Vertical significa que o conteúdo é restringido horizontalmente, mas pode crescer verticalmente além dos limites da janela de visualização, e o usuário pode rolar o conteúdo para cima e para baixo.
Horizontal significa que o conteúdo é restringido verticalmente, mas pode crescer horizontalmente além dos limites da janela de visualização, e o usuário pode rolar o conteúdo para a esquerda e para a direita.
Visibilidade da barra de rolagem
Os controles ScrollViewer e ScrollView usam meios ligeiramente diferentes para configurar a rolagem horizontal e vertical do conteúdo.
- No controle ScrollViewer , as propriedades VerticalScrollBarVisibility e HorizontalScrollBarVisibility controlam a visibilidade das barras de rolagem e se a rolagem em uma direção específica é permitida. Quando uma propriedade é definida como
Disabled, o conteúdo não pode ser rolado nessa direção pela interação do usuário.- Os padrões são:
VerticalScrollBarVisibility="Auto",HorizontalScrollBarVisibility="Disabled"
- Os padrões são:
- No controle ScrollView , as propriedades VerticalScrollBarVisibility e HorizontalScrollBarVisibility controlam apenas a visibilidade das barras de rolagem.
- Os padrões são:
VerticalScrollBarVisibility="Auto",HorizontalScrollBarVisibility="Auto"
- Os padrões são:
Esta tabela descreve as opções de visibilidade para essas propriedades.
| Valor | Description |
|---|---|
| Auto | Uma barra de rolagem aparece somente quando a janela de visualização não pode exibir todo o conteúdo. |
| Desativado (somente ScrollViewer) | Uma barra de rolagem não aparece mesmo quando a janela de visualização não pode exibir todo o conteúdo. A rolagem por interação do usuário está desativada. (A rolagem programática ainda é possível.) |
| Escondido | Uma barra de rolagem não aparece mesmo quando a janela de visualização não pode exibir todo o conteúdo. A rolagem ainda está habilitada e pode ocorrer por meio de interação por toque, teclado ou roda do mouse. |
| Visível | Uma barra de rolagem sempre aparece. (Nos designs de UX atuais, a barra de rolagem aparece apenas quando o cursor do mouse está sobre ela, a menos que a janela de visualização não possa exibir todo o conteúdo. ) |
(ScrollViewer usa o enum ScrollBarVisibility ; ScrollView usa o enum ScrollingScrollBarVisibility .)
Orientação
O controle ScrollView tem uma propriedade ContentOrientation que permite controlar o layout do conteúdo. Essa propriedade determina como o conteúdo pode crescer quando não está explicitamente restrito. Se Height e Width são explicitamente definidos no conteúdo, ContentOrientation não tem efeito.
Esta tabela mostra as ContentOrientation opções para ScrollView e as configurações equivalentes para ScrollViewer.
| Orientação | Vista Rolável | ScrollViewer |
|---|---|---|
| Verticais | ContentOrientation="Vertical" |
VerticalScrollBarVisibility="[Auto][Visible][Hidden]"HorizontalScrollBarVisibility="Disabled" |
| Horizontal | ContentOrientation="Horizontal" |
VerticalScrollBarVisibility="Disabled"HorizontalScrollBarVisibility="[Auto][Visible][Hidden]" |
| Both | ContentOrientation="Both" |
VerticalScrollBarVisibility="[Auto][Visible][Hidden]"HorizontalScrollBarVisibility="[Auto][Visible][Hidden]" |
| Nenhum | ContentOrientation="None" |
VerticalScrollBarVisibility="Disabled"HorizontalScrollBarVisibility="Disabled" |
Disposição vertical
Por padrão, o layout de conteúdo (orientação) de um visualizador de rolagem é vertical.
Neste exemplo, um ItemsRepeater é usado como componente do Content. O UniformGridLayout para o ItemsRepeater posiciona os itens horizontalmente em uma linha até que fique sem espaço (500px neste exemplo) e, em seguida, posiciona o próximo item na próxima linha. O ItemsRepeater pode ser mais alto do que os 400px que o usuário pode ver, mas o usuário pode rolar o conteúdo verticalmente.
O valor padrão ContentOrientation é Vertical, portanto, nenhuma alteração é necessária no ScrollView.
<ScrollView Width="500" Height="400">
<ItemsRepeater ItemsSource="{x:Bind Albums}"
ItemTemplate="{StaticResource MyTemplate}">
<ItemsRepeater.Layout>
<UniformGridLayout RowSpacing="8" ColumnSpacing="8"/>
</ItemsRepeater.Layout>
</ItemsRepeater>
</ScrollView>
Disposição horizontal
Neste exemplo, o conteúdo é um StackPanel que está organizando os seus itens de forma horizontal. A configuração do visualizador de rolagem é alterada para suportar a rolagem horizontal e desabilitar a rolagem vertical.
A propriedade ScrollView do ContentOrientation é definida para Horizontal permitir que o conteúdo cresça horizontalmente tanto quanto necessário.
<ScrollView Width="500" Height="400" ContentOrientation="Horizontal">
<StackPanel Orientation="Horizontal">
<Button Width="200" Content="Button 1"/>
<Button Width="200" Content="Button 2"/>
<Button Width="200" Content="Button 3"/>
<Button Width="200" Content="Button 4"/>
<Button Width="200" Content="Button 5"/>
</StackPanel>
</ScrollView>
Rolagem programática
As propriedades de deslocamento do visualizador de rolagem são somente leitura, mas os métodos são fornecidos para permitir que você role programaticamente.
Para o controlo ScrollView, chame o método ScrollTo e passe os deslocamentos horizontal e vertical para os quais deseja rolar. Nesse caso, a rolagem é apenas vertical, portanto, o valor HorizontalOffset atual é usado. Para rolar até o topo, um VerticalOffset de 0 é usado. Para rolar para a parte inferior, o VerticalOffset é o mesmo que o ScrollableHeight.
<Button Content="Scroll to top" Click="ScrollTopButton_Click"/>
<Button Content="Scroll to bottom" Click="ScrollBottomButton_Click"/>
<ScrollView x:Name="scrollView" Width="500" Height="400">
<StackPanel>
<Button Width="200" Content="Button 1"/>
<Button Width="200" Content="Button 2"/>
<Button Width="200" Content="Button 3"/>
<Button Width="200" Content="Button 4"/>
<Button Width="200" Content="Button 5"/>
</StackPanel>
</ScrollView>
private void ScrollTopButton_Click(object sender, RoutedEventArgs e)
{
scrollView.ScrollTo(
horizontalOffset: scrollView.HorizontalOffset,
verticalOffset: 0);
}
private void ScrollBottomButton_Click(object sender, RoutedEventArgs e)
{
scrollView.ScrollTo(
horizontalOffset: scrollView.HorizontalOffset,
verticalOffset: scrollView.ScrollableHeight);
}
ScrollView fornece também um método ScrollBy que permite realizar scroll vertical ou horizontalmente por um delta especificado a partir do deslocamento atual.
Zoom
Você pode usar um visualizador de rolagem para permitir que um usuário aumente e diminua opticamente o zoom do conteúdo. As interações de zoom ótico são realizadas através dos gestos de pinçar e esticar (mover os dedos para mais longe aumenta o zoom e aproximá-los diminui o zoom) ou pressionando a tecla Ctrl enquanto rola a roda de rolagem do mouse. Para saber mais sobre zoom, veja Zoom ótico e redimensionamento.
Para habilitar o zoom por interação do usuário, defina a ZoomMode propriedade como Enabled (é Disabled por padrão). As alterações na ZoomMode propriedade entram em vigor imediatamente e podem afetar uma interação contínua do usuário.
Este exemplo mostra uma Imagem encapsulada em um visualizador de rolagem configurado para permitir zoom.
<ScrollView Width="500" Height="400"
ContentOrientation="Both"
ZoomMode="Enabled">
<Image Source="Assets/rainier.jpg"/>
</ScrollView>
Nesse caso, a imagem não é restringida pelo visualizador de rolagem, portanto, ela é mostrada inicialmente em seu tamanho nativo. Se a origem da imagem for maior do que a janela de visualização, o utilizador precisará afastar o zoom para ver a imagem inteira, o que pode não ser o comportamento desejado.
O próximo exemplo mostra como configurar o visualizador de rolagem para restringir a imagem à janela de visualização para que ela seja inicialmente carregada com zoom reduzido, e o usuário pode ampliar e rolar se quiser.
Para restringir a imagem ao visor do ScrollView, defina a propriedade ContentOrientation como None. Como a visibilidade da barra de rolagem não está vinculada a essa restrição, as barras de rolagem aparecem automaticamente quando o usuário aumenta o zoom.
<ScrollView Width="500" Height="400"
ContentOrientation="None"
ZoomMode="Enabled">
<Image Source="Assets/rainier.jpg"/>
</ScrollView>
Fator de zoom
Use as propriedades MinZoomFactor e MaxZoomFactor para controlar quanto o utilizador pode ampliar o conteúdo. Essas propriedades são eficazes para interações do usuário e zoom programático.
- Os padrões são:
MinZoomFactor="0.1",MaxZoomFactor="10.0"
<ScrollView Width="500" Height="400"
ContentOrientation="Both"
ZoomMode="Enabled"
MinZoomFactor="1.0" MaxZoomFactor="8.0">
<Image Source="Assets/rainier.png"/>
</ScrollView>
Zoom programático
A propriedade ZoomFactor é de leitura exclusiva, mas existem métodos que permitem aplicar zoom programaticamente. Um uso típico para isso é ligar o scroll viewer a um slider que controla o nível de zoom ou a um botão para redefinir o zoom. (Consulte ScrollViewer no aplicativo WinUI 3 Gallery para ver um exemplo de um controle deslizante de zoom.)
Para o controle ScrollView , chame o método ZoomTo e passe o novo fator de zoom como o primeiro parâmetro.
<Slider Header="Zoom" IsEnabled="True"
Maximum="{x:Bind scrollControl.MaxZoomFactor, Mode=OneWay}"
Minimum="{x:Bind scrollControl.MinZoomFactor, Mode=OneWay}"
StepFrequency="0.1"
ValueChanged="ZoomSlider_ValueChanged" />
<ScrollView Width="500" Height="400"
ContentOrientation="None"
ZoomMode="Enabled">
<Image Source="Assets/rainier.png"/>
</ScrollView>
private void ZoomSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
if (scrollControl != null)
{
scrollControl.ZoomTo(
zoomFactor: (float)e.NewValue,
centerPoint: null)
}
}
ScrollView também fornece um método ZoomBy que permite aumentar e diminuir o zoom por um delta especificado do nível de zoom atual.
UWP e WinUI 2
Observação
O ScrollView controle está disponível somente no WinUI 3. Para UWP e WinUI 2, use o ScrollViewer controle.
Importante
As informações e exemplos neste artigo são otimizados para aplicativos que usam o SDK de Aplicativos Windows e WinUI 3, mas geralmente são aplicáveis a aplicativos UWP que usam WinUI 2. Consulte a referência da API UWP para obter informações e exemplos específicos da plataforma.
Esta seção contém informações que você precisa para usar o controle em um aplicativo UWP ou WinUI 2.
As APIs para esse controle existem no namespace Windows.UI.Xaml.Controls .
- APIs UWP:classe ScrollViewer, classe ScrollBar
- Abra o aplicativo WinUI 2 Gallery e veja o ScrollViewer em ação. O aplicativo WinUI 2 Gallery inclui exemplos interativos da maioria dos controles, recursos e funcionalidades do WinUI 2. Obtenha o aplicativo da Microsoft Store ou obtenha o código-fonte no GitHub.
Recomendamos usar a WinUI 2 mais recente para obter os estilos e modelos mais atuais para todos os controles. WinUI 2.2 ou posterior inclui um novo modelo para este controle que usa cantos arredondados. Consulte Raio de cantopara obter mais informações.
Tópicos relacionados
Windows developer