Partager via


Visionneuse de défilement

Le ScrollViewer contrôle crée une région à défilement dans laquelle le contenu peut être défilé horizontalement et verticalement. Le contenu d’une interface utilisateur est souvent plus grand que la zone d’affichage d’un écran d’ordinateur, et ScrollViewer offre un moyen pratique d’activer le défilement du contenu dans les applications WPF (Windows Presentation Foundation).

Capture d’écran du conteneur de visionneuse de défilement, illustrant les barres de défilement dans WPF.

Le ScrollViewer contrôle encapsule des éléments ScrollBar horizontaux et verticaux, ainsi qu'un conteneur de contenu comme un élément Panel pour afficher d’autres éléments visibles dans une zone de défilement. Vous pouvez utiliser l’élément ScrollViewer lui-même, car il s’agit d’un contrôle composite qui encapsule les ScrollBar fonctionnalités.

Le ScrollViewer contrôle répond aux commandes souris et clavier, et définit de nombreuses méthodes avec lesquelles 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 ScrollViewer état.

Un ScrollViewer ne peut avoir qu’un seul enfant, généralement un Panel qui peut contenir une Children collection d’éléments. La Content propriété définit le seul enfant du ScrollViewer.

Défilement physique ou logique

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

Interface IScrollInfo

L’interface IScrollInfo représente la région de défilement principale au sein d’un ScrollViewer ou contrôle dérivé. L’interface définit les propriétés et méthodes de défilement qui peuvent être implémentées par Panel des éléments qui nécessitent le défilement par unité logique, plutôt que par incrément physique. La conversion d'une instance de IScrollInfo en une instance dérivée Panel, suivie de l'utilisation de ses méthodes de défilement, offre un moyen pratique de faire défiler jusqu'à l'unité logique suivante dans une collection enfant, plutôt que par incréments en pixels. Par défaut, le contrôle prend en charge le ScrollViewer défilement basé sur des 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 mise en page qui prennent en charge le défilement logique en mode natif, vous pouvez toujours obtenir un défilement physique en encapsulant l’élément hôte Panel dans un ScrollViewer et en définissant la propriété CanContentScroll à false.

L'exemple de code suivant montre comment convertir une instance de IScrollInfo en StackPanel et utiliser les méthodes de défilement de contenu (LineUp et LineDown) définies par l'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

Example

L’exemple suivant crée une ScrollViewer fenêtre qui contient du texte et un rectangle. ScrollBar les éléments s’affichent uniquement lorsqu’ils sont nécessaires. Lorsque vous redimensionnez la fenêtre, des éléments ScrollBar apparaissent et disparaissent, en raison des valeurs mises à jour des propriétés ComputedHorizontalScrollBarVisibility et 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>

Sujets pratiques

Titre Descriptif
Gérer l’événement ScrollChanged Découvrez comment gérer l’événement ScrollChanged dans un contrôle ScrollViewer.
Faire défiler le contenu à l’aide de l’interface IScrollInfo Découvrez comment faire défiler le contenu à l’aide de l’interface IScrollInfo.
Utiliser les méthodes de défilement de contenu de ScrollViewer Découvrez comment utiliser les méthodes de défilement de contenu de ScrollViewer.

Styles et modèles

Cette section décrit les styles et les modèles du ScrollViewer contrôle. Vous pouvez modifier la valeur par défaut ControlTemplate pour donner au contrôle une apparence unique. Pour plus d’informations, consultez Quels sont les styles et les modèles ? et Comment créer un modèle pour un contrôle.

Propriété de contenu

La Content propriété définit le seul enfant du ScrollViewer.

Pièces

Le tableau suivant répertorie les parties nommées du ScrollViewer contrôle.

Composant Type Descriptif
PART_BarreDeDéfilementHorizontale ScrollBar ScrollBar est utilisé pour faire défiler le contenu horizontalement.
PART_ScrollContentPresenter ScrollContentPresenter Espace réservé pour le contenu dans le ScrollViewer.
PART_VerticalScrollBar ScrollBar Le ScrollBar est utilisé pour faire défiler le contenu verticalement.

États visuels

Le tableau suivant répertorie les états visuels du ScrollViewer contrôle.

Nom VisualState Nom du VisualStateGroup Descriptif
NonValideConcentré ValidationStates La Validation.HasError propriété jointe est true et le contrôle a le focus.
InvalideNonFocalisé ValidationStates La Validation.HasError propriété jointe est true, le contrôle n'a pas de mise au point.
Valide ValidationStates Le contrôle utilise la Validation classe et la Validation.HasError propriété jointe est false.

Pagination de documents

Pour le contenu du document, une alternative au défilement consiste à choisir un conteneur de documents qui prend en charge la pagination. FlowDocument est destiné aux 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, ce qui empêche le défilement. DocumentViewer fournit une solution pour afficher FixedDocument le contenu, qui utilise le défilement traditionnel pour afficher le contenu en dehors du domaine de l’affichage.

Pour plus d’informations sur les formats de documents et les options de présentation, consultez Documents dans WPF.

Voir aussi