Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ovládací prvek ScrollViewer vytvoří posuvnou oblast, ve které lze obsah posunout vodorovně nebo svisle. Obsah v uživatelském rozhraní je často větší než oblast zobrazení obrazovky počítače a ScrollViewer poskytuje pohodlný způsob, jak povolit posouvání obsahu v aplikacích WPF (Windows Presentation Foundation).
Ovládací ScrollViewer prvek zapouzdřuje vodorovné a svislé ScrollBar prvky a kontejner obsahu (například Panel prvek) k zobrazení dalších viditelných prvků v oblasti umožňující posouvání. Prvek ScrollViewer můžete použít samostatně, protože jde o ovládací prvek složený, který obsahuje funkce ScrollBar.
Ovládací prvek ScrollViewer reaguje na příkazy myši i klávesnice a definuje řadu metod, které umožňují posouvání obsahu předem stanovenými kroky. Můžete použít ScrollChanged událost ke zjištění změny stavu ve ScrollViewer.
A ScrollViewer může mít pouze jedno podřízené Panel , obvykle prvek, který může hostovat Children kolekci prvků. Vlastnost Content definuje jediné dítě objektu ScrollViewer.
Fyzické a logické posouvání
Fyzické posouvání se používá k posouvání obsahu předem určeným fyzickým přírůstkem, obvykle hodnotou deklarovanou v pixelech. Logické posouvání slouží k posouvání na další položku v logickém stromu. Fyzické posouvání je výchozím chováním posouvání většiny Panel prvků. WPF podporuje oba typy posouvání.
Rozhraní IScrollInfo
Rozhraní IScrollInfo představuje hlavní oblast posouvání v základním nebo odvozeném ovládacím prvku ScrollViewer. Rozhraní definuje vlastnosti a metody posouvání, jež mohou být implementovány prvky Panel, které vyžadují posouvání pomocí logické jednotky, nikoli na základě fyzického přírůstku. Přetypování instance IScrollInfo na odvozenou instanci Panel a následné použití jejích metod posouvání je užitečný způsob, jak se posunout k další logické jednotce v podřízené kolekci, místo posouvání po pixelech. Ve výchozím nastavení ScrollViewer ovládací prvek podporuje posouvání podle fyzických jednotek.
StackPanel a VirtualizingStackPanel obojí implementují IScrollInfo a nativně podporují logické posouvání. U ovládacích prvků rozložení, které nativně podporují logické posouvání, můžete stále dosáhnout fyzického posouvání tak, že zabalíte prvek hostitele Panel do ScrollViewer a nastavíte CanContentScroll vlastnost na false.
Následující příklad kódu ukazuje, jak přetypovat instanci IScrollInfo na StackPanel a použít metody posouvání obsahu (LineUp a LineDown) definované rozhraním.
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
Následující příklad vytvoří ScrollViewer v okně, které obsahuje nějaký text a obdélník. ScrollBar prvky se zobrazí pouze v případě, že jsou nezbytné. Když změníte velikost okna, ScrollBar prvky se zobrazí a zmizí kvůli aktualizovaným ComputedHorizontalScrollBarVisibility hodnotám a ComputedVerticalScrollBarVisibility vlastnostem.
// 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>
Návodová témata
| Title | Description |
|---|---|
| Zpracování události ScrollChanged | Zjistěte, jak zpracovat událost ScrollChanged v ovládacím prvku ScrollViewer. |
| Posouvání obsahu pomocí rozhraní IScrollInfo | Naučte se procházet obsah pomocí rozhraní IScrollInfo. |
| Použití metod posouvání obsahu prvku ScrollViewer | Naučte se používat metody posouvání obsahu aplikace ScrollViewer. |
Styly a šablony
Tato část popisuje styly a šablony ScrollViewer ovládacího prvku. Výchozí nastavení ControlTemplate můžete upravit tak, aby ovládací prvek získal jedinečný vzhled. Další informace najdete v tématu Co jsou styly a šablony? a Jak vytvořit šablonu pro ovládací prvek.
Vlastnost obsahu
Vlastnost Content definuje jediné dítě objektu ScrollViewer.
Součástky
Následující tabulka uvádí pojmenované části ScrollViewer ovládacího prvku.
| Část | Typ | Description |
|---|---|---|
| PART_HorizontalScrollBar | ScrollBar | Slouží ScrollBar k horizontálnímu posouvání obsahu. |
| PART_ScrollContentPresenter | ScrollContentPresenter | Zástupný symbol pro obsah v souboru ScrollViewer. |
| PART_VerticalScrollBar | ScrollBar | ScrollBar se používá k posouvání obsahu svisle. |
Vizuální stavy
Následující tabulka uvádí vizuální stavy ScrollViewer ovládacího prvku.
| Název VisualState | Název skupiny VisualStateGroup | Description |
|---|---|---|
| Neplatný fokus | StavyOvěření | Připojená Validation.HasError vlastnost je true a ovládací prvek má fokus. |
| NeplatnýBezZaostření | StavyOvěření | Připojená Validation.HasError vlastnost je true a ovládací prvek nemá fokus. |
| Valid | StavyOvěření | Ovládací prvek používá Validation třídu a připojená Validation.HasError vlastnost je false. |
Stránkování dokumentů
Pro obsah dokumentu je alternativou k posouvání zvolit kontejner dokumentů, který podporuje stránkování. FlowDocument je určen pro dokumenty, které jsou navrženy tak, aby byly hostovány v ovládacím prvku zobrazení, například FlowDocumentPageViewer, který podporuje stránkování obsahu na více stránkách, což brání nutnosti posouvání. DocumentViewer poskytuje řešení pro zobrazení FixedDocument obsahu, který používá tradiční posouvání k zobrazení obsahu mimo sféru oblasti zobrazení.
Další informace o formátech dokumentů a možnostech prezentace naleznete v tématu Dokumenty ve WPF.
Viz také
.NET Desktop feedback