Share via


Información general sobre ScrollViewer

Actualización: noviembre 2007

El contenido de una interfaz de usuario suele ser mayor que el área de presentación de la pantalla de un equipo. El control ScrollViewer proporciona una manera cómoda de habilitar el desplazamiento del contenido en las aplicaciones de Windows Presentation Foundation (WPF). En este tema se presenta el elemento ScrollViewer y se proporcionan varios ejemplos de su uso.

Este tema contiene las siguientes secciones:

  • Control ScrollViewer

  • Desplazamiento físico y lógico

  • Definir y utilizar un elemento ScrollViewer

  • Aplicar estilos a un control ScrollViewer

  • Paginar documentos

  • Temas relacionados

Control ScrollViewer

Existen dos elementos predefinidos que habilitan el desplazamiento en las aplicaciones de WPF: ScrollBar y ScrollViewer. El control ScrollViewer encapsula los elementos ScrollBar horizontales y verticales, así como un contenedor de contenido (como un elemento Panel) para mostrar otros elementos visibles en un área desplazable. Debe crear un objeto personalizado a fin de utilizar el elemento ScrollBar para el desplazamiento del contenido. Sin embargo, puede utilizar el elemento ScrollViewer por sí solo, porque es un control compuesto que encapsula la funcionalidad de ScrollBar.

El control ScrollViewer responde a los comandos del mouse y del teclado, y define numerosos métodos con los que puede desplazarse el contenido en incrementos predeterminados. El evento ScrollChanged puede utilizarse para detectar cambios en el estado de ScrollViewer.

Un control ScrollViewer únicamente puede tener un elemento secundario, que suele ser un elemento Panel capaz de hospedar una colección Children de UIElements. La propiedad Content define el único elemento secundario de ScrollViewer.

Desplazamiento físico y lógico

El desplazamiento físico se utiliza para desplazar el contenido en un incremento físico predeterminado, que suele ser un valor declarado en píxeles. El desplazamiento lógico se utiliza para desplazarse al elemento siguiente en el árbol lógico. El desplazamiento físico es el comportamiento de desplazamiento predeterminado para la mayoría de los elementos Panel. WPF admite ambos tipos de desplazamiento.

Interfaz IScrollInfo

La interfaz IScrollInfo representa el área de desplazamiento principal dentro de un control ScrollViewer o derivado. Esta interfaz define las propiedades de desplazamiento y los métodos implementados por los elementos Panel que requieren el desplazamiento por unidades lógicas, no por incrementos físicos. Convertir una instancia de IScrollInfo en un Panel derivado y, a continuación, utilizar sus métodos de desplazamiento proporciona una manera útil de desplazarse hasta la unidad lógica siguiente en una colección secundaria, en lugar de hacerlo por incrementos en píxeles. De manera predeterminada, el control ScrollViewer admite el desplazamiento por unidades físicas.

StackPanel y VirtualizingStackPanel implementan IScrollInfo y admiten nativamente el desplazamiento lógico. En los controles de diseño que admiten de manera nativa el desplazamiento lógico, puede conseguirse el desplazamiento físico si se ajusta el elemento Panel host en un control ScrollViewer y se establece la propiedad CanContentScroll en false.

En el ejemplo de código siguiente se muestra cómo convertir una instancia de IScrollInfo en un control StackPanel y utilizar los métodos de desplazamiento del contenido (LineUp y LineDown) definidos por la interfaz.

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();
}

Definir y utilizar un elemento ScrollViewer

En el ejemplo siguiente se crea un control ScrollViewer en una ventana que contiene texto y un rectángulo. Los elementos ScrollBar sólo aparecen cuando son necesarios. Cuando se cambia el tamaño de la ventana, los elementos ScrollBar aparecen y desaparecen, ya que se actualizan los valores de las propiedades ComputedHorizontalScrollBarVisibility y ComputedVerticalScrollBarVisibility.

Nota

Para obtener el ejemplo de código completo, vea Ejemplo 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>

Aplicar estilos a un control ScrollViewer

Al igual que todos los controles de Windows Presentation Foundation, pueden aplicarse estilos a ScrollViewer para cambiar su comportamiento de representación predeterminado. Para obtener un ejemplo de un control ScrollViewer al que se ha aplicado un estilo predeterminado, vea Ejemplo ScrollViewer Style. Para obtener información adicional sobre la aplicación de estilos a los controles, vea Aplicar estilos y plantillas.

Paginar documentos

Para el contenido de los documentos, una alternativa al desplazamiento es elegir un contenedor de documento que admita la paginación. Los FlowDocuments son documentos diseñados para hospedarse en un control de vista, como FlowDocumentPageViewer, que admite la paginación del contenido en varias páginas, con lo que se evita la necesidad de desplazamiento. DocumentViewer proporciona una solución para ver el contenido de FixedDocument, que utiliza el desplazamiento tradicional para mostrar el contenido situado fuera del dominio kerberos del área de presentación.

Para obtener información adicional sobre formatos de documentos y opciones de presentación, vea Documentos en Windows Presentation Foundation.

Vea también

Tareas

Cómo: Crear un elemento ScrollViewer

Ejemplo ScrollViewer Style

Conceptos

Documentos en Windows Presentation Foundation

Ejemplo de ControlTemplate de ScrollBar

Optimizar el rendimiento: Controles

Referencia

ScrollViewer

ScrollBar

IScrollInfo