Как добавить ScrollBar в Stackpanel


106

В моем приложении WPF у меня есть Stackpanel, содержащий несколько элементов управления внутри. Как я могу добавить полосу прокрутки к этой панели стека.

Ответы:


162

Поместите это в файл ScrollViewer.


Спасибо. После размещения ScrollViewer вокруг него весь контент не отображается. Я попытался установить для высоты и ширины значение «Авто», но безуспешно. Почему должна показываться только ограниченная часть?
Шамим Хафиз

5
Я понятия не имею. Ваш вопрос состоял из двух предложений, что является небольшой подробностью, позволяющей предвидеть любые потенциальные проблемы.
Joey

Понятно, я вставлял открывающий тег не в то место. Большое спасибо за помощь.
Шамим Хафиз

Простой и точный ответ.
Дэвид Пяо,

94

Stackpanel не имеет встроенного механизма прокрутки, но вы всегда можете обернуть StackPanel в ScrollViewer

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>

3
Что ж, StackPanelреализует IScrollInfoи предлагает ряд методов, связанных с прокруткой. Вы уверены, что в нем нет какого-то «встроенного» механизма прокрутки?
OR Mapper

4
from msdn.microsoft.com/en-us/library/… ... "Это свойство не предназначено для использования в вашем коде. Оно открыто для выполнения контракта интерфейса (IScrollInfo). Установка этого свойства не имеет никакого эффекта. Если вам требуется физическая прокрутка вместо логической, оберните StackPanel в ScrollViewer и установите для его свойства CanContentScroll значение false ».
Skinner

11

Это работает так:

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

0

Для горизонтально ориентированной StackPanel явное добавление видимости обеих полос прокрутки помогло мне получить горизонтальную полосу прокрутки.

    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
        <StackPanel Orientation="Horizontal" />
    </ScrollViewer>

1
Повторение предыдущих ответов.
vapcguy

-4

Если вы имеете в виду, что хотите прокрутить несколько элементов в панели стека, попробуйте обвести ее сеткой. По определению стековая панель имеет бесконечную длину.

Так что попробуйте что-нибудь вроде этого:

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

Вы даже можете сделать это с помощью ScrollViewer


4
Этот код вырван из контекста. Не могли бы вы удалить зависимости, чтобы код можно было использовать без дальнейших изменений?
Маркус Джардерот
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.