Übersicht über ScrollViewer
Inhalte innerhalb einer Benutzeroberfläche sind häufig größer als der Anzeigebereich eines Computerbildschirms. Das ScrollViewer-Steuerelement bietet eine bequeme Möglichkeit, das Scrollen von Inhalten in Windows Presentation Foundation (WPF)-Anwendungen zu ermöglichen. In diesem Thema wird das ScrollViewer-Element vorgestellt und mehrere Verwendungsbeispiele bereitgestellt.
Das ScrollViewer-Steuerelement
Es gibt zwei vordefinierte Elemente, die das Scrollen in WPF-Anwendungen ermöglichen: ScrollBar und ScrollViewer. Das ScrollViewer-Kontrollelement kapselt horizontale und vertikale ScrollBar-Elemente sowie einen Inhaltscontainer (z. B. ein Panel-Element), um andere sichtbare Elemente in einem scrollbaren Bereich anzuzeigen. Sie müssen ein benutzerdefiniertes Objekt erstellen, um das ScrollBar-Element zum Scrollen von Inhalten zu verwenden. Sie können jedoch das ScrollViewer-Element alleine verwenden, da es sich dabei um ein zusammengesetztes Steuerelement handelt, das ScrollBar-Funktionalität einschließt.
Das ScrollViewer-Steuerelement reagiert sowohl auf Maus- als auch auf Tastaturbefehle und definiert zahlreiche Methoden, mit denen anhand vordefinierter inkrementeller Werte durch Inhalt gescrollt werden kann. Sie können das ScrollChanged-Ereignis verwenden, um eine Änderung im ScrollViewer-Zustand zu erkennen.
Ein ScrollViewer kann nur ein untergeordnetes Element haben, in der Regel ein Panel-Element, das eine Children-Sammlung von Elementen hosten kann. Die Content-Eigenschaft definiert das einzige untergeordnete Element des ScrollViewer.
Physisches und logisches Scrollen im Vergleich
Das physische Scrollen wird zum Scrollen durch Inhalt anhand eines vordefinierten physischen Werts verwendet – in der Regel durch einen Wert in Pixel. Das logische Scrollen wird verwendet, um zum nächsten Element in einer logischen Struktur zu scrollen. Das physische Scrollen ist das Standardscrollverhalten für die meisten Panel-Elemente. WPF unterstützt beide Arten des Scrollens.
Die IScrollInfo-Schnittstelle
Die IScrollInfo-Schnittstelle stellt den wichtigsten Scrollbereich innerhalb eines ScrollViewer oder davon abgeleiteten Steuerelements dar. Die Schnittstelle definiert Scrolleigenschaften und -methoden, die von Panel-Elementen implementiert werden können, die das Scrollen anhand einer logischen Einheit und nicht anhand eines physischen inkrementierten Werts erfordern. Durch das Umwandeln einer Instanz von IScrollInfo in ein abgeleitetes Panel-Objekt und die anschließende Verwendung der Scrollmethoden können Sie ganz praktisch zur nächsten logischen Einheit in einer untergeordneten Auflistung scrollen, statt einen inkrementierten Pixelwert verwenden zu müssen. Das ScrollViewer-Steuerelement unterstützt standardmäßig das Scrollen um physische Einheiten.
StackPanel und VirtualizingStackPanel implementieren IScrollInfo und unterstützen nativ das logische Scrollen. Für Layoutsteuerelemente mit nativer Unterstützung des logischen Scrollens können Sie dennoch das physische Scrollen erreichen, indem Sie das Panel-Hostelement mit einem ScrollViewer umschließen und die CanContentScroll-Eigenschaft auf false
setzen.
Im folgenden Codebeispiel wird gezeigt, wie Sie eine Instanz von IScrollInfo in eine StackPanel umwandeln und von der Schnittstelle definierte Methoden zum Scrollen von Inhalten (LineUp und LineDown) verwenden.
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
Definieren und Verwenden eines ScrollViewer-Elements
In folgendem Beispiel wird ein ScrollViewer in einem Fenster erstellt, das Text und ein Rechteck enthält. ScrollBar Elemente werden nur angezeigt, wenn sie erforderlich sind. Wenn Sie die Größe des Fensters ändern, können die ScrollBar-Elemente aufgrund aktualisierter Werte der Eigenschaften ComputedHorizontalScrollBarVisibility und ComputedVerticalScrollBarVisibility erscheinen und verschwinden.
// 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>
Formatieren eines ScrollViewer-Elements
Wie alle Steuerelemente in der Windows Presentation Foundation kann ScrollViewer gestaltet werden, um das Standardrenderingverhalten des Steuerelements zu ändern. Weitere Informationen zum Formatieren von Steuerelementen finden Sie unter Erstellen von Formaten und Vorlagen.
Umbrechen von Dokumenten
Bei Dokumentinhalten besteht eine Alternative zum Scrollen darin, einen Dokumentcontainer auszuwählen, der die Paginierung unterstützt. FlowDocument wird für Dokumente verwendet, die für das Hosten innerhalb eines Anzeigesteuerelements entworfen wurden, wie z.B. FlowDocumentPageViewer, das das seitenübergreifende Umbrechen von Inhalt unterstützt, sodass das Scrollen nicht mehr benötigt wird. DocumentViewer bietet eine Lösung zum Anzeigen von FixedDocument-Inhalten, die herkömmliches Scrollen verwendet, um Inhalte im Außenbereich des Anzeigefeldes anzuzeigen.
Weitere Informationen zu Dokumentformaten und Präsentationsoptionen finden Sie unter Dokumente in WPF-.
Siehe auch
.NET Desktop feedback