Cara menambahkan ScrollBar ke Stackpanel

106

Di aplikasi WPF saya, saya memiliki Stackpanel yang berisi beberapa kontrol di dalamnya. Bagaimana cara menambahkan Scrollbar ke stackpanel ini.

Shamim Hafiz
sumber

Jawaban:

162

Masukkan ke dalam ScrollViewer.

Joey
sumber
Terima kasih. Setelah meletakkan ScrollViewer di sekitarnya, seluruh konten tidak muncul. Saya mencoba mengatur Tinggi dan Lebar ke Otomatis, tetapi tidak berhasil. Mengapa hanya sebagian kecil yang ditampilkan?
Shamim Hafiz
5
Saya tidak tahu. Pertanyaan Anda terdiri dari dua kalimat yang merupakan sedikit detail untuk mengantisipasi potensi masalah.
Joey
Oke, saya menempatkan tag pembuka di tempat yang salah. Terima kasih banyak atas bantuannya.
Shamim Hafiz
Jawaban sederhana dan sempurna.
David Piao
94

Stackpanel tidak memiliki mekanisme scrolling bawaan, tetapi Anda selalu dapat menggabungkan StackPanel di ScrollViewer

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>
biju
sumber
3
Nah, StackPanelmenerapkan IScrollInfodan menawarkan sejumlah metode terkait pengguliran. Anda yakin tidak ada jenis mekanisme pengguliran "bawaan"?
ATAU Mapper
4
dari msdn.microsoft.com/en-us/library/… ... "Properti ini tidak dimaksudkan untuk digunakan dalam kode Anda. Properti ini ditampilkan secara publik untuk memenuhi kontrak antarmuka (IScrollInfo). Menyetel properti ini tidak akan berpengaruh. Jika Anda memerlukan pengguliran fisik alih-alih pengguliran logis, gabungkan StackPanel di ScrollViewer dan setel properti CanContentScroll ke false. "
Skinner
11

Ini bekerja seperti ini:

<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled" Width="340" HorizontalAlignment="Left" Margin="12,0,0,0">
        <StackPanel Name="stackPanel1" Width="311">

        </StackPanel>
</ScrollViewer>

TextBox tb = new TextBox();
tb.TextChanged += new TextChangedEventHandler(TextBox_TextChanged);
stackPanel1.Children.Add(tb);
arnisz
sumber
0

Untuk StackPanel yang berorientasi horizontal, secara eksplisit menempatkan kedua visibilitas scrollbar berfungsi bagi saya untuk mendapatkan scrollbar horizontal.

    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
        <StackPanel Orientation="Horizontal" />
    </ScrollViewer>
VijayKP
sumber
1
Ulangi jawaban sebelumnya.
vapcguy
-4

Jika maksud Anda, Anda ingin menggulir beberapa item di stackpanel Anda, coba letakkan kotak di sekitarnya. Menurut definisi, stackpanel memiliki panjang tak terbatas.

Jadi cobalah sesuatu seperti ini:

   <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Width="311">
              <TextBlock Text="{Binding A}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontStretch="Condensed" FontSize="28" />
              <TextBlock Text="{Binding B}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
        </StackPanel>
    </Grid>

Anda bahkan dapat membuat ini berfungsi dengan ScrollViewer

Aneh
sumber
4
Kode ini diambil di luar konteks. Bisakah Anda menghapus dependensi, sehingga kode dapat digunakan tanpa modifikasi lebih lanjut?
Markus Jarderot