Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El contenido de una interfaz de usuario suele ser mayor que el área de visualización de una pantalla del equipo. El ScrollViewer control proporciona una manera cómoda de habilitar el desplazamiento del contenido en aplicaciones de Windows Presentation Foundation (WPF). En este tema se presenta el ScrollViewer elemento y se proporcionan varios ejemplos de uso.
El control ScrollViewer
Hay dos elementos predefinidos que permiten desplazarse en aplicaciones wpF: ScrollBar y ScrollViewer. El control ScrollViewer encapsula elementos tanto horizontales como verticales ScrollBar y un contenedor de contenido (como un elemento Panel) para mostrar otros elementos visibles en un área desplazable. Debe crear un objeto personalizado para poder usar el ScrollBar elemento para el desplazamiento de contenido. Sin embargo, puede usar el ScrollViewer elemento por sí mismo porque es un control compuesto que encapsula la ScrollBar funcionalidad.
El ScrollViewer control responde a los comandos de mouse y teclado, y define numerosos métodos con los que desplazar el contenido por incrementos predeterminados. Puede usar el ScrollChanged evento para detectar un cambio en un ScrollViewer estado.
Un ScrollViewer solo puede tener un elemento secundario, normalmente un Panel elemento que puede hospedar una Children colección de elementos. La propiedad Content define el único elemento secundario del ScrollViewer.
Desplazamiento físico frente a desplazamiento lógico
El desplazamiento físico se usa para desplazar el contenido por un incremento físico predeterminado, normalmente por un valor declarado en píxeles. El desplazamiento lógico se usa para desplazarse hasta el siguiente elemento del árbol lógico. El desplazamiento físico es el comportamiento de desplazamiento predeterminado para la mayoría de los Panel elementos. WPF admite ambos tipos de desplazamiento.
Interfaz IScrollInfo
La interfaz IScrollInfo representa la región de desplazamiento principal dentro de un control ScrollViewer o uno derivado. La interfaz define las propiedades y métodos de desplazamiento que se pueden implementar mediante Panel elementos que requieren desplazamiento por unidad lógica, en lugar de por un incremento físico. La conversión de una instancia de IScrollInfo en un derivado Panel y, a continuación, el uso de sus métodos de desplazamiento proporciona una manera útil de desplazarse a la siguiente unidad lógica de una colección secundaria, en lugar de por incremento de píxeles. De forma predeterminada, el control admite desplazamiento por unidades físicas ScrollViewer.
StackPanel y VirtualizingStackPanel implementan IScrollInfo y admiten de forma nativa el desplazamiento lógico. Para los controles de diseño que admiten de forma nativa el desplazamiento lógico, aún puede lograr el desplazamiento físico envolviendo el elemento host Panel en un ScrollViewer y configurando la propiedad CanContentScroll a false
.
En el ejemplo de código siguiente se muestra cómo convertir una instancia de IScrollInfo en StackPanel y usar métodos de desplazamiento de contenido (LineUp y LineDown) definidos por la interfaz .
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
Definir y usar un elemento ScrollViewer
En el ejemplo siguiente se crea un ScrollViewer objeto en una ventana que contiene texto y un rectángulo. ScrollBar Los elementos solo aparecen cuando son necesarios. Al cambiar el tamaño de la ventana, los ScrollBar elementos aparecen y desaparecen, debido a los valores actualizados de las ComputedHorizontalScrollBarVisibility propiedades y 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>
Aplicar estilo a ScrollViewer
Al igual que todos los controles de Windows Presentation Foundation, ScrollViewer se puede aplicar estilo a para cambiar el comportamiento de representación predeterminado del control. Para obtener más información sobre el estilo de control, consulte Estilos y Plantillas.
Paginación de documentos
Para el contenido del documento, una alternativa al desplazamiento es elegir un contenedor de documentos que admita la paginación. FlowDocument es para los documentos diseñados para hospedarse dentro de un control de visualización, como FlowDocumentPageViewer, que admite la paginación de contenido en varias páginas, lo que impide la necesidad de desplazarse. DocumentViewer proporciona una solución para ver contenido FixedDocument, que utiliza el desplazamiento tradicional para mostrar contenido fuera del ámbito del área de visualización.
Para obtener más información sobre los formatos de documento y las opciones de presentación, vea Documentos en WPF.
Consulte también
.NET Desktop feedback