Sdílet prostřednictvím


ScrollViewer

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).

Snímek obrazovky kontejneru zobrazení posuvníku, který demonstruje posuvníky ve WPF.

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é