Aracılığıyla paylaş


Kaydırma Çubuğu

A ScrollBar, Thumb kaydırarak geçerli görüntüleme alanının dışındaki içeriği görünür hale getirip görüntülemenizi sağlar. Kullanıcı arabirimindeki içerik genellikle bilgisayar ekranının görüntüleme alanından daha büyüktür ve ScrollBar, Windows Presentation Foundation (WPF) uygulamalarında kullanılan temel kaydırma mekanizmasını sağlar.

WPF'de dikey ve yatay kaydırma çubuklarının ekran görüntüsü.

WPF uygulamalarında kaydırmayı etkinleştiren önceden tanımlanmış iki öğe vardır: ScrollBar ve ScrollViewer. ScrollViewer denetimi, diğer görünür öğeleri kaydırılabilir bir alanda göstermek için yatay ve dikey ScrollBar öğelerini ve bir içerik kapsayıcısını (örneğin, bir Panel öğesi) kapsüller. ScrollBar öğesini içerik kaydırma için kullanmak üzere özel bir nesne oluşturmanız gerekir. Ancak, ScrollViewer işlevselliğini kapsayan bir bileşen kontrolü olduğundan, ScrollBar öğesini tek başına kullanabilirsiniz.

Başlık Description
ScrollBar Üzerinde Başparmak Boyutunu Özelleştirme ScrollBar denetiminde başparmak öğesinin boyutunu özelleştirmeyi öğrenin.

Temel kavramlar

Fiziksel ve mantıksal kaydırma karşılaştırması

Fiziksel kaydırma, içeriği önceden belirlenmiş bir fiziksel artışla (genellikle piksel cinsinden bildirilen bir değerle) kaydırmak için kullanılır. Mantıksal kaydırma, mantıksal ağaçta bir sonraki öğeye kaydırmak için kullanılır. Fiziksel kaydırma çoğu öğe için Panel varsayılan kaydırma davranışıdır. WPF her iki kaydırma türünü de destekler.

IScrollInfo arabirimi, bir ScrollViewer veya türetilmiş bir denetim içindeki ana kaydırma alanını temsil eder. Arayüz, fiziksel bir artış yerine mantıksal birim üzerinden kaydırma gerektiren Panel öğeleri tarafından uygulanabilen tüm kaydırma özelliklerini ve yöntemlerini tanımlar. Bir IScrollInfo örneğini türev Panel olarak dönüştürmek ve ardından kaydırma işlevlerini kullanmak, piksel artışı yerine alt koleksiyondaki bir sonraki mantıksal birime kaydırmak için kullanışlı bir yol sağlar.

StackPanel ve VirtualizingStackPanel, IScrollInfo'yu uygular ve yerel olarak mantıksal kaydırmayı destekler. Mantıksal kaydırmayı yerel olarak destekleyen düzen denetimleri için, konak Panel öğesini bir ScrollViewer içinde kaydırarak ve CanContentScroll özelliğini false olarak ayarlayarak fiziksel kaydırmayı yine de gerçekleştirebilirsiniz.

Örnekler

İçerik kaydırma için IScrollInfo kullanma

Aşağıdaki kod örneği, bir IScrollInfo örneğinin StackPanel olarak nasıl dönüştürüleceğini ve arabirimin tanımladığı içerik kaydırma yöntemlerini (LineUp ve LineDown) kullanmayı gösterir.

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

ScrollBar öğeleriyle ScrollViewer oluşturma

Aşağıdaki örnek, bazı metinler ve bir dikdörtgen içeren bir pencerede ScrollViewer oluşturur. ScrollBar öğeleri yalnızca gerekli olduğunda görünür. Pencereyi yeniden boyutlandırdığınızda, ScrollBar ve ComputedHorizontalScrollBarVisibility özelliklerinin güncelleştirilmiş değerleri nedeniyle ComputedVerticalScrollBarVisibility öğeleri görünür ve kaybolur.


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

Stiller ve şablonlar

Bu bölümde ScrollBar denetim için stiller ve şablonlar açıklanmaktadır. Denetime benzersiz bir görünüm vermek için varsayılanı ControlTemplate değiştirebilirsiniz. Daha fazla bilgi için bkz. Stiller ve şablonlar nedir? ve Denetim için şablon oluşturma.

İçerik özelliği

Bu denetim bir içerik özelliği tanımlamaz.

Parçalar

Aşağıdaki tabloda, ScrollBar denetiminin adlandırılmış bölümleri listelenir.

Bölüm Türü Description
PART_Track Track ScrollBar öğesinin konumunu gösteren elemanın kapsayıcısı.

Görsel durumlar

Aşağıdaki tabloda denetimin görsel durumları listelenmiştir ScrollBar .

VisualState Adı VisualStateGroup Adı Description
Disabled OrtakDurumlar Denetim devre dışı bırakıldı.
Mouseover OrtakDurumlar Fare işaretçisi denetimin üzerine yerleştirilir.
Sıradan OrtakDurumlar Varsayılan durum.
Focused FocusStates Denetimin klavye odağı vardır.
Odaklanmamış FocusStates Kontrolün klavye odağı yoktur.
GeçersizOdaklı DoğrulamaDurumları Ekli Validation.HasError özelliği true ve kontrol odakta.
InvalidUnfocused DoğrulamaDurumları Ekli Validation.HasError özellik true'dir ve denetim odağına sahip değildir.
Geçerli DoğrulamaDurumları Denetim sınıfını Validation kullanır ve Validation.HasError ekli özelliği ise şeklindedir false.

Ayrıca bakınız