Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 controle ScrollViewer fornece uma maneira conveniente de habilitar a rolagem de conteúdo em aplicativos do WPF (Windows Presentation Foundation). Este tópico apresenta o elemento ScrollViewer 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 controle ScrollViewer encapsula elementos ScrollBar horizontais e verticais e um contêiner de conteúdo (como um elemento Panel) para exibir outros elementos visíveis em uma área rolável. 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 ScrollBar funcionalidade.
O controle ScrollViewer responde a comandos de mouse e teclado e define vários métodos com os quais rolar o conteúdo por incrementos predeterminados. Você pode usar o evento ScrollChanged para detectar uma alteração em um estado de ScrollViewer.
Um ScrollViewer só pode ter um filho, normalmente um elemento Panel que pode hospedar uma coleção Children de elementos. A propriedade Content define o único filho do ScrollViewer.
Rolagem física versus rolagem lógica
A rolagem física é usada para rolar o conteúdo por um incremento físico predeterminado, normalmente por um valor declarado em pixels. A rolagem lógica é usada para rolar até o próximo item na árvore lógica. A rolagem física é o comportamento de rolagem padrão para a maioria dos elementos Panel. O WPF dá suporte a ambos os tipos de rolagem.
A interface IScrollInfo
A interface IScrollInfo representa a região de rolagem principal dentro de um controle ScrollViewer ou derivado. A interface define propriedades de rolagem e métodos que podem ser implementados por elementos Panel que exigem rolagem por unidade lógica, em vez de por um incremento físico. A conversão de uma instância de IScrollInfo para um Panel derivado e, em seguida, o uso de seus métodos de rolagem oferece uma maneira útil de rolar até a próxima unidade lógica em uma coleção de filhos, em vez de usar incremento de pixel. Por padrão, o controle ScrollViewer dá suporte à rolagem por unidades físicas.
StackPanel e VirtualizingStackPanel implementam IScrollInfo e dão suporte nativo à rolagem lógica. Para controles de layout que dão suporte nativo à rolagem lógica, você ainda pode obter rolagem física encapsulando o elemento Panel do 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 em um StackPanel e usar métodos de rolagem de 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 ScrollViewer em uma janela que contém algum texto e um retângulo. ScrollBar elementos aparecem somente quando são necessários. Quando você redimensiona a janela, os elementos ScrollBar aparecem e desaparecem devido aos valores atualizados das propriedades ComputedHorizontalScrollBarVisibility 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>
Estilizando um ScrollViewer
Como todos os controles no Windows Presentation Foundation, o ScrollViewer pode ser estilizado para alterar o 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 dá suporte à paginação de conteúdo em várias páginas, impedindo a necessidade de rolagem. DocumentViewer fornece uma solução para visualizar o conteúdo de FixedDocument, que usa rolagem tradicional para exibir conteúdo que está fora da área de exibição.
Para obter informações adicionais sobre formatos de documento e opções de apresentação, consulte Documentos no WPF.
Consulte também
.NET Desktop feedback