Übersicht über ScrollViewer

Der Inhalt innerhalb einer Benutzeroberfläche ist oft umfangreicher als der Anzeigebereich eines Computerbildschirms. Das ScrollViewer-Steuerelement bietet eine komfortable Möglichkeit, den Bildlauf für Inhalt in Windows Presentation Foundation (WPF)-Anwendungen zu ermöglichen. In diesem Thema wird das ScrollViewer-Element eingeführt. Außerdem werden mehrere Verwendungsbeispiele bereitgestellt.

Dieses Thema enthält folgende Abschnitte:

  • Das ScrollViewer-Steuerelement

  • Physischer Bildlauf im Vergleich zu logischem Bildlauf

  • Definieren und Verwenden eines ScrollViewer-Elements

  • Formatieren eines ScrollViewer

  • Paginieren von Dokumenten

  • Verwandte Themen

Das ScrollViewer-Steuerelement

Es gibt zwei vordefinierte Elemente, die einen Bildlauf in WPF-Anwendungen ermöglichen: ScrollBar und ScrollViewer. Das ScrollViewer-Steuerelement kapselt horizontale und vertikale ScrollBar-Elemente sowie einen Inhaltscontainer (wie zum Beispiel ein Panel-Element), um andere sichtbare Elemente in einem bildlauffähigen Bereich anzuzeigen. Sie müssen ein benutzerdefiniertes Objekt erstellen, um das ScrollBar-Element für den Bildlauf durch Inhalte zu verwenden. Sie können jedoch das ScrollViewer-Element allein verwenden, da es sich um ein zusammengesetztes Steuerelement handelt, das ScrollBar-Funktionalitäten kapselt.

Das ScrollViewer-Steuerelement reagiert auf Maus- und Tastaturbefehle und definiert zahlreiche Methoden, mit denen ein Bildlauf von Inhalten anhand vordefinierter Schritte durchgeführt werden kann. Sie können das ScrollChanged-Ereignis verwenden, um eine Änderung eines ScrollViewer-Zustands zu erkennen.

Ein ScrollViewer kann lediglich ein einzelnes untergeordnetes Element besitzen. Hierbei handelt es sich üblicherweise um ein Panel-Element, von dem eine Children-Auflistung von Elementen gehostet werden kann. Die Content-Eigenschaft definiert das einzige untergeordnete Element von ScrollViewer.

Physischer Bildlauf im Vergleich zulogischem Bildlauf

Ein physischer Bildlauf wird verwendet, um Inhalte mit einer vordefinierten physischen Schrittweite zu bewegen, typischerweise durch einen in Pixel festgelegten Wert. Ein logischer Bildlauf wird verwendet, um zum nächsten Element in der logischen Struktur zu gelangen. Der physische Bildlauf stellt das Standardbildlaufverhalten für die meisten Panel-Elemente dar. Von WPF werden beide Bildlaufarten unterstützt.

Die IScrollInfo-Schnittstelle

Die IScrollInfo-Schnittstelle stellt den Hauptbildlaufbereich innerhalb eines ScrollViewer-Steuerelements oder eines abgeleiteten Steuerelements dar. Die Schnittstelle definiert Eigenschaften und Methoden für den Bildlauf, die von Panel -Elementen implementiert werden können, die eher einen Bildlauf auf Basis logischer Einheiten statt physischer Schrittweiten erfordern. Das Umwandeln einer Instanz von IScrollInfo zu einem abgeleiteten Panel und die anschließende Verwendung der zugehörigen Bildlaufmethoden bieten eine praktische Möglichkeit, um einen Bildlauf zur nächsten logischen Einheit in einer untergeordneten Auflistung durchzuführen. Dieses Vorgehen ist besser als die Verwendung von Pixelschritten. Standardmäßig unterstützt das ScrollViewer-Steuerelement den Bildlauf auf Basis physischer Einheiten.

StackPanel und VirtualizingStackPanel implementieren beide IScrollInfo und unterstützen direkt einen logischen Bildlauf. Für Layoutsteuerelemente, die einen logischen Bildlauf direkt unterstützen, können Sie dennoch einen physischen Bildlauf erreichen, indem Sie das Panel-Hostelement mit einem ScrollViewer-Element umschließen und die CanContentScroll-Eigenschaft auf false festlegen.

Das folgende Codebeispiel zeigt das Umwandeln einer Instanz von IScrollInfo in ein StackPanel und die Verwendung der von der Schnittstelle definierten Bildlaufmethoden (LineUp und LineDown) für den Inhalt.

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

Definieren und Verwenden eines ScrollViewer-Elements

Im folgenden Beispiel wird ein ScrollViewer-Fenster erstellt, das etwas Text und ein Rechteck enthält. ScrollBar-Elemente werden nur angezeigt, wenn sie notwendig sind. Beim Ändern der Fenstergröße werden die ScrollBar-Elemente ein- oder ausgeblendet, abhängig von den aktualisierten Werten der Eigenschaften ComputedHorizontalScrollBarVisibility und 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>

Formatieren eines ScrollViewer

Wie alle Steuerelemente in Windows Presentation Foundation kann ScrollViewer formatiert werden, um das Standardrenderverhalten des Steuerelements zu ändern. Weitere Informationen zum Formatieren von Steuerelementen finden Sie unter Erstellen von Formaten und Vorlagen.

Paginieren von Dokumenten

Für Dokumenteninhalte kann als Alternative zum Bildlauf ein Dokumentcontainer ausgewählt werden, der Paginierung unterstützt. FlowDocument ist für Dokumente gedacht, die innerhalb eines Anzeigesteuerelements (beispielsweise FlowDocumentPageViewer) gehostet werden sollen, von dem die Aufteilung des Inhalts auf mehrere Seiten unterstützt und der Bildlauf überflüssig gemacht wird. Bei DocumentViewer handelt es sich um eine Lösung zum Anzeigen von FixedDocument-Inhalt, bei der Inhalt außerhalb des Anzeigebereichs mithilfe des herkömmlichen Bildlaufs angezeigt wird.

Weitere Informationen über Dokumentformate und Präsentationsoptionen finden Sie unter Dokumente in WPF.

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines ScrollViewer

Referenz

ScrollViewer

ScrollBar

IScrollInfo

Konzepte

Dokumente in WPF

ScrollBar-Stile und -Vorlagen

Optimieren der Leistung: Steuerelemente