Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A ScrollBar permite-lhe visualizar conteúdos que estão fora da área de visualização atual, deslizando o Thumb para tornar o conteúdo visível. O conteúdo dentro de uma interface de utilizador é frequentemente maior do que a área de exibição de um ecrã de computador, e o ScrollBar fornece o mecanismo fundamental de scroll utilizado em todas as aplicações Windows Presentation Foundation (WPF).
Existem dois elementos pré-definidos que permitem o scrolling em aplicações WPF: ScrollBar e ScrollViewer. O ScrollViewer controlo encapsula elementos horizontais e verticais ScrollBar e um contentor de conteúdo (como um Panel elemento) para exibir outros elementos visíveis numa área deslocável. Tens de construir um objeto personalizado para usar o ScrollBar elemento para scroll de conteúdo. No entanto, podes usar o ScrollViewer elemento isoladamente porque é um controlo composto que encapsula ScrollBar a funcionalidade.
| Title | Description |
|---|---|
| personalizar o tamanho do polegar em uma barra de rolagem | Aprenda a personalizar o tamanho do elemento do polegar num controlo ScrollBar. |
Conceitos-chave
Scroll físico vs. lógico
O deslocamento físico é utilizado para rolar conteúdos por um incremento físico pré-determinado, geralmente por um valor especificado em pixels. O scrolling lógico é usado para deslocar até ao item seguinte na árvore lógica. O comportamento padrão de rolagem física aplica-se à maioria dos elementos Panel. O WPF suporta ambos os tipos de scrolling.
A IScrollInfo interface representa a principal região de deslocamento dentro de um ScrollViewer ou um controlo derivado. As interfaces definem propriedades e métodos de rolagem que podem ser implementados por Panel elementos que requerem rolagem por unidade lógica, em vez de por um incremento físico. Castar uma instância de IScrollInfo para um derivado Panel e depois usar os seus métodos de scrolling fornece uma forma útil de deslocar até à próxima unidade lógica numa coleção filha, em vez de por incremento de píxeis.
StackPanel e VirtualizingStackPanel implementam IScrollInfo e suportam nativamente scrolling lógico. Para controlos de layout que suportam deslocamento lógico nativamente, ainda pode conseguir deslocamento físico ao envolver o elemento anfitrião Panel num ScrollViewer e definir a propriedade CanContentScroll para false.
Examples
Usar IScrollInfo para scroll de conteúdo
O exemplo de código seguinte demonstra como converter uma instância de IScrollInfo para um StackPanel e utilizar 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
Criação de um ScrollViewer com elementos ScrollBar
O exemplo seguinte cria um ScrollViewer numa janela que contém algum texto e um retângulo. ScrollBar Os elementos só aparecem quando são necessários. Quando redimensionas a janela, os ScrollBar elementos aparecem e desaparecem, devido aos 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>
Estilos e modelos
Esta secção descreve os estilos e modelos para o ScrollBar controle. Podes modificar o padrão ControlTemplate para dar ao controlo uma aparência única. Para mais informações, veja O que são estilos e modelos? e Como criar um modelo para um controlo.
Propriedade de conteúdo
Este controlo não define uma propriedade de conteúdo.
Partes
A tabela seguinte lista as partes nomeadas para o ScrollBar controlo.
| Parte | Tipo | Description |
|---|---|---|
| PART_Track | Track | O contentor para o elemento que indica a localização do ScrollBar. |
Estados visuais
A tabela seguinte lista os estados visuais do ScrollBar controlo.
| Nome VisualState | Nome VisualStateGroup | Description |
|---|---|---|
| Disabled | Estados Comuns | O controlo está desativado. |
| MouseOver | Estados Comuns | O ponteiro do rato está posicionado sobre o controlo. |
| Normal | Estados Comuns | O estado padrão. |
| Focused | FocusStates | O controlo tem foco no teclado. |
| Sem foco | FocusStates | O controlo não está focado no teclado. |
| FocadoInválido | Estados de Validação | A Validation.HasError propriedade anexa é true e o controlo tem foco. |
| InvalidUnfocused | Estados de Validação | A Validation.HasError propriedade anexa é true e o controlo não tem foco. |
| Válido | Estados de Validação | O controlo usa a Validation classe e a Validation.HasError propriedade associada é false. |
Consulte também
.NET Desktop feedback