Posuvník

A ScrollBar umožňuje zobrazit obsah mimo aktuální oblast zobrazení posunutím Thumb , aby byl obsah viditelný. Obsah v uživatelském rozhraní je často větší než oblast zobrazení obrazovky počítače a ScrollBar poskytuje základní mechanismus posouvání používaný v aplikacích WINDOWS Presentation Foundation (WPF).

Snímek obrazovky se svislými a vodorovnými posuvníky ve WPF

Existují dva předdefinované prvky, které umožňují posouvání v aplikacích WPF: ScrollBar a ScrollViewer. 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í. Je nutné vytvořit vlastní objekt pro použití elementu ScrollBar pro posouvání obsahu. Prvek ScrollViewer však můžete použít samostatně, protože jde o složený ovládací prvek, který zapouzdřuje funkcionalitu ScrollBar.

Title Description
Přizpůsobení velikosti palce na posuvníku Zjistěte, jak přizpůsobit velikost elementu palce v ovládacím prvku ScrollBar.

Klíčové koncepty

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

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.

Examples

Použití IScrollInfo pro posouvání obsahu

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

Vytvoření scrollVieweru s elementy ScrollBar

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>

Styly a šablony

Tato část popisuje styly a šablony ScrollBar 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

Tento ovládací prvek nedefinuje vlastnost obsahu.

Součástky

Následující tabulka uvádí pojmenované části ScrollBar ovládacího prvku.

Část Typ Description
PART_Track Track Kontejner pro prvek, který označuje pozici ScrollBar.

Vizuální stavy

Následující tabulka uvádí vizuální stavy ScrollBar ovládacího prvku.

Název VisualState Název skupiny VisualStateGroup Description
Disabled CommonStates Ovládací prvek je zakázaný.
Mouseover CommonStates Ukazatel myši se umístí nad ovládací prvek.
Normální CommonStates Výchozí stav.
Focused FocusStates Ovládací prvek má fokus klávesnice.
Nezaměřený FocusStates Ovládací prvek nemá fokus klávesnice.
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.

Viz také