Compartilhar via


Visão geral de ScrollViewer

Conteúdo em uma interface do usuário é normalmente maior do que a área de exibição de uma tela de computador. O controle ScrollViewer fornece uma maneira conveniente de permitir a rolagem de conteúdo em aplicativos Windows Presentation Foundation (WPF). Este tópico apresenta o elemento ScrollViewer e fornece vários exemplos de uso.

Este tópico contém as seções a seguir:

  • The ScrollViewer Control

  • Physical vs. Logical Scrolling

  • Defining and Using a ScrollViewer Element

  • Styling a ScrollViewer

  • Paginating Documents

  • Related Topics

O controle ScrollViewer

Há dois elementos predefinidos que permitem a rolagem em WPF aplicativos: ScrollBar e ScrollViewer. O controle ScrollViewer encapsula elementos ScrollBar horizontais e verticais e um recipiente de conteúdo (como um elemento Panel) para exibir outros elementos visíveis em uma área de rolagem. Você deve criar um objeto personalizado para usar o elemento ScrollBar para rolagem de conteúdo. No entanto, você pode usar o elemento ScrollViewer por si só porque ele é um controle composto que encapsula funcionalidade de ScrollBar.

O controle ScrollViewer responde a comandos tanto do mouse quanto de teclado e define vários métodos com os quais se realiza rolagem de conteúdo em incrementos pré-determinados. Você pode usar o evento ScrollChanged para detectar uma alteração em um estado de ScrollViewer.

Um ScrollViewer só pode ter um filho, geralmente um elemento Panel que pode hospedar uma coleção Children de UIElements. A propriedade Content define o único filho de ScrollViewer.

Físicos vs.Rolagem lógico

Rolagem física é usada para rolar o conteúdo por um incremento físico pré-determinado, geralmente por um valor que está declarado em pixels. Rolagem lógica é usada para rolar para o próximo item na árvore de lógica. rolar físico é o comportamento de rolar padrão para a maioria dos Panel elementos. WPF oferece suporte a ambos os tipos de rolagem.

A interface IScrollInfo

A interface IScrollInfo representa a área de rolagem principal em um ScrollViewer ou controle derivado. A interface define propriedades e métodos de rolagem que podem ser implementados por elementos Panel que requerem a rolagem por unidade lógica, em vez de por um incremento físico. Fazer o cast de uma instância de IScrollInfo para um Panel derivado e então usar seus métodos de rolagem fornece uma maneira útil de rolar para a próxima unidade lógica em uma coleção filha, e não por incremento de pixel. Por padrão, o controle ScrollViewer oferece suporte a rolagem por unidades físicas.

Ambos StackPanel e VirtualizingStackPanel implementam IScrollInfo e oferecem suporte nativo a rolagem lógica. Para controles de layout que oferecem suporte nativo a rolagem lógica, você ainda pode obter rolagem física fazendo o wrap do elemento Panel host em um ScrollViewer e definindo a propriedade CanContentScroll como false.

O exemplo de código a seguir demonstra como converter uma instância de IScrollInfo para um StackPanel e usar métodos de rolagem de conteúdo (LineUp e LineDown) definidos pela interface.

Private Sub spLineUp(ByVal sender As Object, ByVal args As RoutedEventArgs)

    CType(sp1, IScrollInfo).LineUp()
End Sub
Private Sub spLineDown(ByVal sender As Object, ByVal args As RoutedEventArgs)

    CType(sp1, IScrollInfo).LineDown()
End Sub
private void spLineUp(object sender, RoutedEventArgs e)
{
    ((IScrollInfo)sp1).LineUp();
}
private void spLineDown(object sender, RoutedEventArgs e)
{
    ((IScrollInfo)sp1).LineDown();
}

Definindo e usando um elemento ScrollViewer

O exemplo a seguir cria um ScrollViewer em uma janela que contém algum texto e um retângulo. ScrollBar elementos aparecem somente quando forem necessários. Quando você redimensiona a janela, os elementos ScrollBar aparecem e desaparecem, devido a valores atualizados de propriedades ComputedHorizontalScrollBarVisibility e ComputedVerticalScrollBarVisibility.

ObservaçãoObservação:

Para a amostra de código completo, consulte Exemplo de ScrollViewer.

'Define a ScrollViewer.
Dim myScrollViewer As New ScrollViewer
myScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto

'Add Layout control.
Dim myStackPanel As New StackPanel
myStackPanel.HorizontalAlignment = System.Windows.HorizontalAlignment.Left
myStackPanel.VerticalAlignment = System.Windows.VerticalAlignment.Top

Dim myTextBlock As New TextBlock
myTextBlock.TextWrapping = TextWrapping.Wrap
myTextBlock.Margin = New Thickness(0, 0, 0, 20)
myTextBlock.Text = "Scrolling is enabled when it is necessary. Resize the Window, making it larger and smaller."

Dim myRectangle As New Rectangle
myRectangle.Fill = Brushes.Red
myRectangle.Width = 500
myRectangle.Height = 500

'Add child elements to the parent StackPanel.
myStackPanel.Children.Add(myTextBlock)
myStackPanel.Children.Add(myRectangle)

'Add the StackPanel as the lone Child of the Border
myScrollViewer.Content = myStackPanel
Me.Content = myScrollViewer
// Create the application's main window
mainWindow = new Window ();
mainWindow.Title = "ScrollViewer Sample";

// Define a ScrollViewer
myScrollViewer = new ScrollViewer();
myScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;

// Add Layout control
myStackPanel = new StackPanel();
myStackPanel.HorizontalAlignment = HorizontalAlignment.Left;
myStackPanel.VerticalAlignment = VerticalAlignment.Top;

TextBlock myTextBlock = new TextBlock();
myTextBlock.TextWrapping = TextWrapping.Wrap;
myTextBlock.Margin = new Thickness(0, 0, 0, 20);
myTextBlock.Text = "Scrolling is enabled when it is necessary. Resize the Window, making it larger and smaller.";

Rectangle myRectangle = new Rectangle();
myRectangle.Fill = Brushes.Red;
myRectangle.Width = 500;
myRectangle.Height = 500;

// Add child elements to the parent StackPanel
myStackPanel.Children.Add(myTextBlock);
myStackPanel.Children.Add(myRectangle);

// Add the StackPanel as the lone Child of the Border
myScrollViewer.Content = myStackPanel;

// Add the Border as the Content of the Parent Window Object
mainWindow.Content = myScrollViewer;
mainWindow.Show ();

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
      WindowTitle="ScrollViewer Sample">
  <ScrollViewer HorizontalScrollBarVisibility="Auto">
    <StackPanel VerticalAlignment="Top" HorizontalAlignment="Left">
      <TextBlock TextWrapping="Wrap" Margin="0,0,0,20">Scrolling is enabled when it is necessary. 
      Resize the window, making it larger and smaller.</TextBlock>
      <Rectangle Fill="Red" Width="500" Height="500"></Rectangle>
    </StackPanel>
  </ScrollViewer>
</Page>

Estilizando um ScrollViewer

Como todos os controles em Windows Presentation Foundation, o ScrollViewer pode ser estilizado para alterar o comportamento de desenho padrão do controle. Para obter um exemplo de um ScrollViewer estilizado personalizado, consulte Exemplo de estilo ScrollViewer. Para obter informações adicionais sobre estilo de controle, consulte Styling and Templating.

Paginando documentos

Para o conteúdo do documento, uma alternativa para rolagem é escolher um recipiente de documento que ofereça suporte a paginação. FlowDocuments são documentos que são projetados para ser hospedada em um controle de exibição, sistema autônomo FlowDocumentPageViewer, que oferece suporte a conteúdo paginating em várias páginas, evitando a necessidade de rolagem. DocumentViewer Fornece uma solução para visualização FixedDocument conteúdo, que usa o tradicional de rolagem para exibir conteúdo fora do território da área de exibição.

Para obter informações adicionais sobre formatos de documentos e opções de apresentação, consulte Documentos em Windows Presentation Foundation.

Consulte também

Tarefas

Como: Criar um ScrollViewer

Exemplo de estilo ScrollViewer

Conceitos

Documentos em Windows Presentation Foundation

Exemplo de ControlTemplate do ScrollBar

Otimizando o desempenho: Controles

Referência

ScrollViewer

ScrollBar

IScrollInfo