Compartilhar via


Visão geral de ScrollViewer

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

O controle ScrollViewer

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

O ScrollViewer controle responde a comandos do mouse e do teclado e define vários métodos com os quais rolar o conteúdo por incrementos predeterminados. Você pode usar o ScrollChanged evento para detectar uma alteração em um ScrollViewer estado.

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

Rolagem física x lógica

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

A interface IScrollInfo

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

StackPanele ambos implementam IScrollInfo e VirtualizingStackPanel suportam nativamente a rolagem lógica. Para controles de layout que oferecem suporte nativo à rolagem lógica, você ainda pode obter rolagem física encapsulando o elemento host Panel em um ScrollViewer e definindo a CanContentScroll propriedade como false.

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

private void spLineUp(object sender, RoutedEventArgs e)
{
    ((IScrollInfo)sp1).LineUp();
}
private void spLineDown(object sender, RoutedEventArgs e)
{
    ((IScrollInfo)sp1).LineDown();
}
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

Definindo e usando um elemento ScrollViewer

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


// Create the application's main window
mainWindow = gcnew System::Windows::Window();
mainWindow->Title = "ScrollViewer Sample";

// Define a ScrollViewer
myScrollViewer = gcnew ScrollViewer();
myScrollViewer->HorizontalScrollBarVisibility = ScrollBarVisibility::Auto;

// Add Layout control
myStackPanel = gcnew StackPanel();
myStackPanel->HorizontalAlignment = HorizontalAlignment::Left;
myStackPanel->VerticalAlignment = VerticalAlignment::Top;

TextBlock^ myTextBlock = gcnew TextBlock();
myTextBlock->TextWrapping = TextWrapping::Wrap;
myTextBlock->Margin = System::Windows::Thickness(0, 0, 0, 20);
myTextBlock->Text = "Scrolling is enabled when it is necessary. Resize the Window, making it larger and smaller.";

Rectangle^ myRectangle = gcnew 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 ScrollViewer
myScrollViewer->Content = myStackPanel;

// Add the ScrollViewer as the Content of the parent Window object
mainWindow->Content = myScrollViewer;
mainWindow->Show();


// 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 ScrollViewer
myScrollViewer.Content = myStackPanel;

// Add the ScrollViewer as the Content of the parent Window object
mainWindow.Content = myScrollViewer;
mainWindow.Show ();


'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 ScrollViewer
myScrollViewer.Content = myStackPanel

'Add the ScrollViewer as the Content of the parent Window object
Me.Content = myScrollViewer
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://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>

Aplicando estilo a um ScrollViewer

Como todos os controles no Windows Presentation Foundation, o pode ser estilizado para alterar o ScrollViewer comportamento de renderização padrão do controle. Para obter informações adicionais sobre aplicação de estilo de controle, consulte Aplicação de estilo e modelagem.

Paginando documentos

Para o conteúdo do documento, uma alternativa à rolagem é escolher um contêiner de documento que dá suporte à paginação. FlowDocument é para documentos projetados para serem hospedados em um controle de exibição, como FlowDocumentPageViewer, que oferece suporte à paginação de conteúdo em várias páginas, evitando a necessidade de rolagem. DocumentViewer Fornece uma solução para exibir conteúdo, que usa a rolagem tradicional para exibir FixedDocument conteúdo fora do território da área de exibição.

Para obter informações adicionais sobre formatos de documento e opções de apresentação, consulte Documentos no WPF.

Confira também