Partager via


Vue d'ensemble de ScrollViewer

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 contre 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 peut avoir un seul enfant, en général un élément Panel qui peut héberger une collection d'éléments Children. La propriété Content définit l'unique enfant du ScrollViewer.

Défilement physique contredé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 contenant du texte et un rectangle. Les éléments ScrollBar apparaissent uniquement 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.


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


         // 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 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 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. FlowDocument convient aux documents conçus pour être hébergés dans un contrôle d'affichage, tel que FlowDocumentPageViewer, qui prend en charge le contenu paginé sur plusieurs pages, supprimant ainsi le besoin de défilement. DocumentViewer fournit une solution pour la consultation de 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 WPF.

Voir aussi

Tâches

Comment : créer un ScrollViewer

Référence

ScrollViewer

ScrollBar

IScrollInfo

Concepts

Documents dans WPF

Styles et modèles ScrollBar

Optimisation des performances : contrôles