Partager via


Vue d'ensemble de ScrollViewer

Mise à jour : novembre 2007

Le contenu d'une interface utilisateur est souvent plus important que la zone d'affichage d'un écran d'ordinateur. Le contrôle ScrollViewer offre un moyen pratique d'activer le défilement du contenu dans les applications Windows Presentation Foundation (WPF). Cette rubrique présente l'élément ScrollViewer et fournit plusieurs exemples d'utilisation.

Cette rubrique contient les sections suivantes :

  • Contrôle ScrollViewer

  • Défilement physique et défilement logique

  • Définition et utilisation d'un élément ScrollViewer

  • Application d'un style à un ScrollViewer

  • Pagination des documents

  • Rubriques connexes

Contrôle ScrollViewer

Il existe deux éléments prédéfinis qui activent le défilement dans les applications WPF : ScrollBar et ScrollViewer. Le contrôle ScrollViewer encapsule des éléments ScrollBar horizontaux et verticaux et un conteneur de contenu (tel qu'un élément Panel) afin d'afficher d'autres éléments visibles dans une zone défilante. Vous devez générer un objet personnalisé afin d'utiliser l'élément ScrollBar pour faire défiler le contenu. Toutefois, vous pouvez utiliser l'élément ScrollViewer lui-même car c'est un contrôle composite qui encapsule les fonctionnalités ScrollBar.

Le contrôle ScrollViewer répond aux commandes de la souris et du clavier et définit de nombreuses méthodes qui permettent de faire défiler le contenu par incréments prédéterminés. Vous pouvez utiliser l'événement ScrollChanged pour détecter une modification dans un état ScrollViewer.

Un ScrollViewer ne peut avoir qu'un seul enfant, généralement un élément Panel qui peut héberger une collection Children d'UIElements. La propriété Content définit l'unique enfant du ScrollViewer.

Défilement physique et défilement logique

Le défilement physique est utilisé pour faire défiler le contenu par un incrément physique prédéterminé, généralement par une valeur indiquée en pixels. Le défilement logique est utilisé pour passer à l'élément suivant dans l'arborescence logique. Le défilement physique est défini par défaut pour la plupart des éléments Panel. WPF prend en charge les deux types de défilement.

Interface IScrollInfo

L'interface IScrollInfo représente la zone de défilement principale dans un contrôle ScrollViewer ou un contrôle dérivé. L'interface définit les propriétés et les méthodes de défilement qui peuvent être implémentées par les éléments Panel qui requièrent le défilement par unité logique, plutôt que par incrément physique. Le casting d'une instance de IScrollInfo en un Panel dérivé, puis l'utilisation de ses méthodes de défilement permettent de passer facilement à l'unité logique suivante dans une collection enfant, plutôt que par incrément de pixels. Par défaut, le contrôle ScrollViewer prend en charge le défilement par unités physiques.

StackPanel et VirtualizingStackPanel implémentent IScrollInfo et prennent en charge le défilement logique en mode natif. Pour les contrôles de disposition qui prennent en charge le défilement logique en mode natif, vous pouvez toujours effectuer un défilement physique en encapsulant l'élément hôte Panel dans un ScrollViewer et en affectant false à la propriété CanContentScroll.

L'exemple de code suivant montre comment effectuer le cast d'une instance de IScrollInfo en un StackPanel et utiliser les méthodes de défilement de contenu (LineUp et LineDown) définies par l'interface.

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

Définition et utilisation d'un élément ScrollViewer

L'exemple suivant crée un ScrollViewer dans une fenêtre qui contient du texte et un rectangle. Les éléments ScrollBar n'apparaissent que lorsqu'ils sont nécessaires. Lorsque vous redimensionnez la fenêtre, les éléments ScrollBar apparaissent et disparaissent, en raison des valeurs mises à jour des propriétés ComputedHorizontalScrollBarVisibility et ComputedVerticalScrollBarVisibility.

Remarque :

Pour obtenir l'exemple de code complet, consultez ScrollViewer, exemple.

'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>

Application d'un style à un ScrollViewer

Comme tous les contrôles de Windows Presentation Foundation, il est possible d'appliquer un style à ScrollViewer pour modifier le comportement de rendu par défaut du contrôle. Pour obtenir un exemple de ScrollViewer avec un style personnalisé, consultez Style ScrollViewer, exemple. Pour plus d'informations sur le style des contrôles, consultez Application d'un style et création de modèles.

Pagination des documents

Pour le contenu du document, une alternative au défilement consiste à choisir un conteneur de document qui prend en charge la pagination. Les FlowDocuments sont des documents conçus pour être hébergés dans un contrôle d'affichage, tel que FlowDocumentPageViewer, qui prend en charge la pagination du contenu sur plusieurs pages, en évitant le défilement. DocumentViewer fournit une solution pour afficher le contenu FixedDocument, qui utilise le défilement traditionnel pour afficher le contenu en dehors de la zone d'affichage.

Pour plus d'informations sur les formats de document et les options de présentation, consultez Documents dans Windows Presentation Foundation.

Voir aussi

Tâches

Comment : créer un ScrollViewer

Style ScrollViewer, exemple

Concepts

Documents dans Windows Presentation Foundation

ScrollBar ControlTemplate, exemple

Optimisation des performances : contrôles

Référence

ScrollViewer

ScrollBar

IScrollInfo